Apache Solr 인덱싱

Apache Solr 인덱싱 (Solr Indexing)

인덱싱(indexing)은 콘텐츠를 Solr 인덱스에 추가하고, 필요하면 수정하거나 삭제하는 과정이에요. 인덱스에 콘텐츠를 추가하면 Solr이 검색할 수 있게 돼요.

Solr 인덱스는 다양한 소스에서 데이터를 받을 수 있어요. XML 파일, CSV(콤마 구분 값) 파일, 데이터베이스 테이블에서 추출한 데이터, 그리고 Microsoft Word·PDF 같은 일반적인 파일 형식까지요.

출처: https://solr.apache.org/guide/solr/latest/getting-started/solr-indexing.html

데이터 로딩 방법 3가지

  1. Solr Cell + Apache Tika — 이진 파일이나 구조화된 파일(Office, Word, PDF 등 독점 포맷)을 인제스트하기 위한 방식.
  2. XML 파일 업로드 — HTTP 요청으로 Solr 서버에 XML을 보내는 방식. 요청을 만들 수 있는 모든 환경에서 동작.
  3. Java 클라이언트 API — CMS처럼 Java API를 제공하는 애플리케이션에 통합할 때 최선.

어떤 방법으로든 공통 데이터 구조가 있어요: 각각 이름과 콘텐츠(빈 값일 수도 있음)를 가진 여러 필드를 포함하는 문서예요. 필드 중 하나는 보통 고유 ID 필드(데이터베이스의 기본 키에 해당)로 지정되지만, Solr이 반드시 요구하지는 않아요.

인덱싱 과정

인덱스에 연결된 스키마에 필드 이름이 정의돼 있으면, 콘텐츠가 토큰화될 때 해당 필드의 분석 단계가 적용돼요. 스키마에 명시적으로 정의되지 않은 필드는 무시되거나, 이름과 매칭되는 동적 필드 정의에 매핑돼요.

예시 디렉터리

-e 옵션으로 Solr을 시작하면 example/ 디렉터리가 예제 인스턴스의 기본 디렉터리로 사용돼요. example/exampledocs/ 서브디렉터리에는 다양한 포맷의 샘플 문서가 있어서 인덱싱 실험에 쓸 수 있어요.

curl로 인덱싱하기

예제로 curl을 자주 사용해요. 예를 들어 XML 문서를 인덱싱하려면:

curl -X POST -H 'Content-Type: application/xml' \
  'http://localhost:8983/solr/techproducts/update?commit=true' \
  --data-binary @exampledocs/books.xml

commit=true를 붙이면 커밋까지 실행해 즉시 검색 가능하게 해요.

성능 참고

테스트·예제엔 curl이 편리하지만, 프로덕션에서 업데이트 성능을 최대로 내려면 curl보다 Solr Cell이나 Java 클라이언트 API를 쓰는 게 낫다고 공식 문서는 권장해요. 대량 인덱싱은 커밋을 여러 번 하기보다 배치로 모아서 커밋하는 게 효율적이에요.

더 알아보기