[java] 아파치 루신(Apache Lucene)을 이용한 키워드 재검색 기능의 구현 방법
개요
키워드 재검색 기능은 검색 엔진에서 많이 사용되는 기능 중 하나입니다. 이 기능은 사용자가 검색어를 입력한 후에 검색 결과를 받아본 뒤, 해당 검색 결과 중에서 다시 검색을 수행할 수 있는 기능입니다. 이를 통해 사용자는 좀 더 세부적인 검색을 수행할 수 있게 됩니다.
이번에는 아파치 루신(Apache Lucene)을 이용하여 키워드 재검색 기능을 구현하는 방법에 대해 알아보겠습니다.
Lucene을 이용한 검색 인덱스 생성
- Maven 또는 Gradle을 이용하여 Lucene 의존성을 추가합니다.
Maven:
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.9.0</version>
</dependency>
Gradle:
implementation 'org.apache.lucene:lucene-core:8.9.0'
- 인덱스 생성을 위한 Analyzer와 Directory를 설정합니다.
Analyzer analyzer = new StandardAnalyzer();
Directory directory = FSDirectory.open(Paths.get("/path/to/index/directory"));
- IndexWriter를 생성하고 필요한 필드를 추가합니다.
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(directory, config);
Document document = new Document();
document.add(new TextField("title", "Lucene Introduction", Field.Store.YES));
document.add(new TextField("content", "Lucene is a full-featured text search engine library", Field.Store.YES));
writer.addDocument(document);
writer.commit();
writer.close();
키워드 재검색 기능 구현
- 검색어를 이용하여 색인을 검색하는 메소드를 생성합니다.
public List<Document> searchIndex(String searchQuery, int limit) throws IOException, ParseException {
List<Document> searchResults = new ArrayList<>();
Analyzer analyzer = new StandardAnalyzer();
Directory directory = FSDirectory.open(Paths.get("/path/to/index/directory"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser queryParser = new QueryParser("content", analyzer);
Query query = queryParser.parse(searchQuery);
TopDocs topDocs = searcher.search(query, limit);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
searchResults.add(document);
}
reader.close();
return searchResults;
}
- 검색 결과를 토대로 키워드 재검색을 수행하는 메소드를 생성합니다.
public List<Document> performKeywordSearch(String searchQuery, String keyword, int limit) throws IOException, ParseException {
List<Document> keywordResults = new ArrayList<>();
// 검색어로 색인을 검색
List<Document> searchResults = searchIndex(searchQuery, limit);
// 검색 결과 중에서 키워드를 포함하는 문서 필터링
for (Document document : searchResults) {
String content = document.get("content");
if (content.contains(keyword)) {
keywordResults.add(document);
}
}
return keywordResults;
}
실행 예시
public static void main(String[] args) throws IOException, ParseException {
String searchQuery = "Lucene introduction";
String keyword = "search";
int limit = 10;
// 키워드 재검색 수행
List<Document> keywordResults = performKeywordSearch(searchQuery, keyword, limit);
// 결과 출력
for (Document document : keywordResults) {
System.out.println("Title: " + document.get("title"));
System.out.println("Content: " + document.get("content"));
System.out.println("---");
}
}
결론
아파치 루신을 이용하여 키워드 재검색 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 사용자는 세부적인 검색을 수행하여 원하는 결과를 더욱 정확하게 얻을 수 있게 됩니다.
더 자세한 내용은 아파치 루신 공식 문서를 참고하시기 바랍니다.