[java] 아파치 루신(Apache Lucene)을 이용한 범위 기반 검색 쿼리 처리 방법

아파치 루신(Apache Lucene)은 자바 기반의 오픈 소스 검색 엔진 라이브러리로, 풍부한 검색 기능을 제공합니다. 이 중에서도 범위 기반 검색은 특히 유용한 기능입니다. 범위 기반 검색은 특정 범위의 값을 검색하는 쿼리를 처리하는 기능을 말합니다.

아파치 루신에서는 RangeQuery 클래스를 사용하여 범위 기반 검색을 처리할 수 있습니다. RangeQuery는 필드와 범위 값을 지정하여 검색 결과를 반환하는 기능을 제공합니다.

다음은 아파치 루신을 사용하여 범위 기반 검색 쿼리를 처리하는 예제 코드입니다.

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.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.BytesRef;

public class RangeSearchExample {
    public static void main(String[] args) throws Exception {
        // 메모리에 인덱스 저장
        Directory indexDirectory = new RAMDirectory();

        // 인덱스 작성기 생성
        IndexWriterConfig config = new IndexWriterConfig();
        IndexWriter writer = new IndexWriter(indexDirectory, config);

        // 문서 작성
        Document doc1 = new Document();
        doc1.add(new StringField("id", "1", Field.Store.YES));
        doc1.add(new StringField("name", "John", Field.Store.YES));
        doc1.add(new StringField("age", "25", Field.Store.YES));
        writer.addDocument(doc1);

        Document doc2 = new Document();
        doc2.add(new StringField("id", "2", Field.Store.YES));
        doc2.add(new StringField("name", "Jane", Field.Store.YES));
        doc2.add(new StringField("age", "35", Field.Store.YES));
        writer.addDocument(doc2);

        // 인덱스 작성
        writer.commit();
        writer.close();

        // 검색기 생성
        IndexSearcher searcher = new IndexSearcher(indexDirectory);

        // 범위 검색 쿼리 생성
        Query query = NumericRangeQuery.newIntRange("age", 20, 30, true, true);

        // 검색 실행
        TopDocs results = searcher.search(query, 10);

        // 검색 결과 출력
        for (ScoreDoc scoreDoc : results.scoreDocs) {
            Document resultDoc = searcher.doc(scoreDoc.doc);
            System.out.println("ID: " + resultDoc.get("id"));
            System.out.println("Name: " + resultDoc.get("name"));
            System.out.println("Age: " + resultDoc.get("age"));
        }

        // 검색기 종료
        searcher.close();
    }
}

위 예제 코드에서는 메모리에 인덱스를 생성하고, 문서를 작성한 뒤 범위 기반 검색을 실행합니다. “age” 필드를 기준으로 20부터 30까지의 값을 검색하도록 설정했습니다. 검색 결과는 Document 객체로 반환되며, 결과를 출력하는 부분에서 해당 문서의 필드 값을 가져와 출력합니다.

이렇게 아파치 루신을 사용하여 범위 기반 검색 쿼리를 처리할 수 있습니다. 루신의 강력한 검색 기능을 활용하여 다양한 검색 요구사항을 처리할 수 있습니다.

더 자세한 내용은 아파치 루신 공식 홈페이지를 참고하시기 바랍니다.