Spring Boot整合Lucene创建索引和搜索的基本步骤如下:
- 添加依赖到
pom.xml
:
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>YOUR_LUCENE_VERSION</version>
</dependency>
- 创建索引:
@Component
public class LuceneIndexer {
private static final String INDEX_DIR = "path/to/index/dir";
public void index(List<DocumentData> documents) throws IOException {
Directory dir = FSDirectory.open(Paths.get(INDEX_DIR));
IndexWriterConfig config = new IndexWriterConfig();
IndexWriter writer = new IndexWriter(dir, config);
for (DocumentData document : documents) {
Document luceneDocument = new Document();
luceneDocument.add(new StringField("id", document.getId(), Field.Store.YES));
luceneDocument.add(new TextField("content", document.getContent(), Field.Store.YES));
writer.addDocument(luceneDocument);
}
writer.close();
}
}
- 搜索索引:
@Component
public class LuceneSearcher {
public List<SearchResult> search(String query) throws IOException {
List<SearchResult> results = new ArrayList<>();
Directory dir = FSDirectory.open(Paths.get(INDEX_DIR));
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query luceneQuery = parser.parse(query);
TopDocs topDocs = searcher.search(luceneQuery, 10);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
SearchResult result = new SearchResult();
result.setId(doc.get("id"));
result.setContent(doc.get("content"));
results.add(result);
}
reader.close();
return results;
}
}
- 使用Spring Boot的命令行运行器来创建和搜索索引:
@SpringBootApplication
public class LuceneApplication implements CommandLineRunner {
@Autowired
private LuceneIndexer indexer;
@Autowired
private LuceneSearcher searcher;
public static void main(String[] args) {
SpringApplication.run(LuceneApplication.class, args);
}
@Override
public void run(String... args) throws Exception {