[java] 아파치 루신(Apache Lucene)을 사용한 검색 결과 옵션 설정 방법

아파치 루신은 자바 기반의 오픈 소스 검색 엔진으로, 다양한 형태의 데이터를 효율적으로 색인화하고 검색할 수 있습니다. 이번 글에서는 아파치 루신을 사용하여 검색 결과의 옵션을 설정하는 방법에 대해 알아보겠습니다.

검색 결과 정렬

검색 결과의 정렬은 Sort 클래스를 사용하여 설정할 수 있습니다. 아래는 Sort 클래스를 활용한 정렬 예제입니다.

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;

IndexSearcher searcher = new IndexSearcher(indexReader);
Sort sort = new Sort(new SortField("field_name", SortField.Type.STRING, true));
TopDocs topDocs = searcher.search(query, 10, sort);

위의 예제에서는 SortField를 생성하여 검색 결과를 field_name 필드의 문자열 값에 따라 내림차순으로 정렬합니다. 다른 정렬 방식을 사용하려면 SortField.Type을 변경하면 됩니다.

검색 결과 페이징

검색 결과를 페이징하는 방법은 TopDocs 클래스의 생성자를 사용하여 설정할 수 있습니다. 아래는 페이징을 설정한 예제입니다.

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TopDocs;

IndexSearcher searcher = new IndexSearcher(indexReader);
TopDocs topDocs = searcher.search(query, pageIndex * pageSize + pageSize, sort);

위의 예제에서는 pageIndexpageSize 변수를 사용하여 원하는 페이지의 검색 결과를 가져오고 있습니다. 예를 들어, pageIndex가 0이고 pageSize가 10이면 첫 번째 페이지의 10개의 결과를 가져옵니다.

검색 결과 필터링

검색 결과를 필터링하기 위해서는 QueryWrapperFilter 클래스를 사용할 수 있습니다. 아래는 검색 결과를 필터링하는 예제입니다.

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;

IndexSearcher searcher = new IndexSearcher(indexReader);
Term term = new Term("field_name", "filter_value");
QueryWrapperFilter filter = new QueryWrapperFilter(new TermQuery(term));
TopDocs topDocs = searcher.search(query, filter, 10, sort);

위의 예제에서는 TermQuery 클래스를 사용하여 field_name 필드에 대한 filter_value 값으로 검색 결과를 필터링합니다.

결론

아파치 루신을 사용하여 검색 결과의 옵션을 설정하는 방법에 대해 알아보았습니다. 검색 결과 정렬, 페이징, 필터링 등 다양한 옵션을 설정하여 더욱 효율적인 검색 기능을 구현할 수 있습니다.

참고 문서: