[java] 아파치 루신(Apache Lucene)을 활용한 전문검색 시스템 개발 방법

이 글은 아파치 루신(Apache Lucene)을 활용하여 전문검색 시스템을 개발하는 방법에 대해 알아보겠습니다.

1. 아파치 루신 소개

아파치 루신은 자바로 작성된 오픈소스 검색 엔진으로, 대규모 텍스트 데이터를 검색하고 색인화하는데 사용됩니다. 아파치 루신은 강력한 텍스트 검색 기능을 제공하며, 빠른 검색 속도와 확장성을 가지고 있습니다.

2. 아파치 루신 설치

아파치 루신을 사용하기 위해서는 먼저 환경을 구성해야 합니다. 아파치 루신은 Java 개발 환경에서 동작하기 때문에, 먼저 Java SE Development Kit(JDK)를 설치해야 합니다. 그리고 아파치 루신의 최신 버전을 다운로드하여 설치합니다.

3. 아파치 루신 색인화(Indexing)

아파치 루신에서는 검색할 데이터를 색인화해야 합니다. 색인화는 텍스트 데이터를 색인 구조로 변환하는 과정입니다. 데이터를 색인화하기 위해서는 IndexWriter 객체를 생성하고, Document 객체에 데이터를 추가한 후 IndexWriter를 통해 색인을 생성합니다.

다음은 아파치 루신을 사용하여 색인화하는 예제 코드입니다:

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Indexer {
    public void indexDocuments(String indexPath, List<Document> documents) {
        try {
            Directory indexDir = FSDirectory.open(Paths.get(indexPath));
            IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
            IndexWriter writer = new IndexWriter(indexDir, config);

            for (Document document : documents) {
                writer.addDocument(document);
            }

            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 아파치 루신 검색(Searching)

색인화된 데이터를 검색하기 위해서는 검색어와 일치하는 문서를 찾아야 합니다. 검색은 IndexSearcher 객체를 생성하고, QueryParser를 사용하여 검색어를 파싱한 후 IndexSearcher를 통해 검색을 수행합니다.

다음은 아파치 루신을 사용하여 검색하는 예제 코드입니다:

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Searcher {
    public List<Document> search(String indexPath, String queryString) {
        List<Document> results = new ArrayList<>();
        try {
            Directory indexDir = FSDirectory.open(Paths.get(indexPath));
            IndexReader reader = DirectoryReader.open(indexDir);
            IndexSearcher searcher = new IndexSearcher(reader);
            QueryParser parser = new QueryParser("content", new StandardAnalyzer());
            Query query = parser.parse(queryString);
            TopDocs topDocs = searcher.search(query, 10);

            for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                Document doc = searcher.doc(scoreDoc.doc);
                results.add(doc);
            }

            reader.close();
        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
        return results;
    }
}

결론

이제 위에서 소개한 방법을 참고하여 아파치 루신을 활용한 전문검색 시스템을 개발할 수 있습니다. 아파치 루신은 강력한 검색 엔진으로 다양한 산업 분야에서 활용되고 있으며, 자세한 내용은 아파치 루신 공식 문서를 참고하시기 바랍니다.