[java] 아파치 루신(Apache Lucene)을 이용한 빠른 검색 색인화 방법

아파치 루신은 자바 기반의 오픈 소스 검색 라이브러리로, 전문 검색 기능을 제공해주는 라이브러리입니다. 아파치 루신을 사용하면 빠르고 효율적인 검색 기능을 쉽게 구현할 수 있습니다.

이번 포스팅에서는 아파치 루신을 사용하여 빠른 검색 색인화를 수행하는 방법에 대해 알아보겠습니다.

1. 루신 색인화 개요

아파치 루신은 검색을 위해 문서를 색인화하는 과정이 필요합니다. 색인화란 문서 내용을 검색 가능한 형식으로 변환하여 저장하는 작업을 말합니다. 이렇게 변환된 색인 데이터를 이용하여 효율적인 검색이 가능해집니다.

2. 루신 색인화 과정

2.1. 문서 분석기(Analyzer) 설정

먼저, 문서를 색인화하기 위해 문서 분석기를 설정해야 합니다. 문서 분석기는 문서를 토큰으로 분리하고, 필요한 전처리 작업을 수행합니다. 예를 들어, 영어 문서인 경우 단어를 소문자로 변환하거나 불용어를 제거하는 등의 작업을 수행할 수 있습니다.

Analyzer analyzer = new StandardAnalyzer();

위의 코드는 표준 문서 분석기를 사용하는 예시입니다. 사용하고자 하는 분석기에 따라 설정 코드를 변경해야 합니다.

2.2. 인덱스 생성

인덱스는 색인화된 문서를 저장하는 공간입니다. 아파치 루신은 인덱스를 생성하기 위해 IndexWriter를 사용합니다. 해당 객체를 생성할 때, 색인 데이터의 저장 위치와 문서 분석기를 인자로 전달합니다.

IndexWriterConfig config = new IndexWriterConfig(analyzer);
Directory directory = FSDirectory.open(Paths.get("index"));
IndexWriter indexWriter = new IndexWriter(directory, config);

위의 예시 코드에서는 표준 문서 분석기와 index라는 이름의 디렉토리에 인덱스를 생성하는 설정을 사용합니다. 실제 사용 시에는 원하는 분석기와 인덱스 저장 위치를 지정해야 합니다.

2.3. 문서 추가

색인화할 문서를 하나씩 추가합니다. 각 문서는 Document 객체로 표현됩니다. Document 객체에는 필드(Field)를 추가하여 문서의 콘텐츠를 설정합니다.

Document document = new Document();
document.add(new TextField("content", "검색할 문서 내용", Field.Store.YES));
indexWriter.addDocument(document);

TextField 객체를 사용하여 문서 내용을 설정하고, Field.Store.YES 옵션을 통해 콘텐츠를 인덱스에 저장합니다.

2.4. 인덱스 저장 및 종료

모든 문서를 추가한 후에는 인덱스를 저장하고 IndexWriter를 종료합니다.

indexWriter.commit();
indexWriter.close();

3. 검색 색인화 결과

인덱스를 생성한 후에는 해당 인덱스를 검색하여 원하는 결과를 가져올 수 있습니다. 아파치 루신은 IndexSearcher를 사용하여 인덱스를 검색하고 검색 결과를 가져옵니다.

IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("content", analyzer);

Query query = parser.parse("검색어");
TopDocs topDocs = searcher.search(query, 10);

위의 예시 코드에서는 content 필드에서 검색어를 검색하는 설정을 사용합니다. searcher.search() 메서드를 통해 검색을 수행하고, TopDocs 객체에서 검색 결과를 가져옵니다.

이렇게 아파치 루신을 사용하여 빠른 검색 색인화를 수행할 수 있습니다.

참고 자료