[java] 자바 프로그래밍에서 아파치 루신(Apache Lucene)을 활용한 텍스트 검색 예제

아파치 루신은 자바로 개발된 오픈 소스 텍스트 검색 엔진입니다. 이 라이브러리를 사용하면 웹 검색 엔진이나 문서 검색 시스템을 개발할 수 있습니다. 이번 예제에서는 자바 프로그래밍에서 아파치 루신을 활용하여 텍스트 검색을 수행하는 방법에 대해 알아보겠습니다.

아파치 루신 설치

먼저, 아파치 루신을 설치해야 합니다. 다음은 아파치 루신을 다운로드하는 공식 웹 사이트 주소입니다.

다운로드한 아파치 루신 라이브러리를 프로젝트에 추가하세요. 이 라이브러리는 텍스트 검색을 위한 다양한 기능을 제공해 줍니다.

텍스트 색인 생성

먼저, 텍스트 색인을 생성해야 합니다. 텍스트 색인은 검색할 텍스트 데이터를 색인화하여 검색에 용이하게 해주는 작업입니다. 다음은 아파치 루신을 사용하여 텍스트 색인을 생성하는 예제 코드입니다.

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class TextSearchExample {
    public static void main(String[] args) throws Exception {
        // 색인 생성을 위한 상수값 설정
        String INDEX_DIRECTORY = "index";
        String FIELD_CONTENT = "content";

        // 색인 디렉토리 생성
        Directory directory = new RAMDirectory();

        // 색인 생성을 위한 IndexWriter 설정
        StandardAnalyzer analyzer = new StandardAnalyzer();
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        IndexWriter writer = new IndexWriter(directory, config);


        // 문서 생성 및 색인 추가
        Document doc1 = new Document();
        doc1.add(new StringField("id", "1", Field.Store.YES));
        doc1.add(new TextField(FIELD_CONTENT, "Apache Lucene is a powerful text search engine.", Field.Store.YES));
        writer.addDocument(doc1);

        Document doc2 = new Document();
        doc2.add(new StringField("id", "2", Field.Store.YES));
        doc2.add(new TextField(FIELD_CONTENT, "Searching text with Lucene is easy and efficient.", Field.Store.YES));
        writer.addDocument(doc2);

        // 색인 생성 종료
        writer.close();

        // 색인 검색을 위한 IndexSearcher 설정
        DirectoryReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // 검색어 생성
        String queryStr = "Lucene";
        QueryParser parser = new QueryParser(FIELD_CONTENT, analyzer);
        Query query = parser.parse(queryStr);

        // 검색 수행
        int hitsPerPage = 10;
        searcher.search(query, hitsPerPage);

        // 검색 결과 출력
        System.out.println("검색어: " + queryStr);
        System.out.println("검색 결과 개수: " + hits.totalHits);
        for (ScoreDoc scoreDoc : hits.scoreDocs) {
            Document resultDoc = searcher.doc(scoreDoc.doc);
            System.out.println("문서 ID: " + resultDoc.get("id") + ", 점수: " + scoreDoc.score);
            System.out.println("내용: " + resultDoc.get(FIELD_CONTENT));
        }

        // IndexSearcher 종료
        reader.close();
    }
}

위 예제 코드에서는 IndexWriter를 사용하여 색인을 생성하고, IndexSearcher를 사용하여 검색을 수행합니다. 색인 생성 후, QueryParser를 사용하여 검색어를 파싱하고, search 메서드를 호출하여 검색을 수행합니다. 검색 결과는 ScoreDocDocument 객체를 통해 확인할 수 있습니다.

결론

위 예제 코드를 통해 자바 프로그래밍에서 아파치 루신을 활용하여 텍스트 검색을 수행하는 방법을 알아보았습니다. 아파치 루신은 강력한 검색 엔진 기능을 제공하는 라이브러리이며, 다양한 검색 엔진 개발에 활용될 수 있습니다.

더 많은 정보를 원하시면 아파치 루신 공식 문서를 참조하시기 바랍니다.