以下内容基于Lucene全文检索的基础操作整理,涵盖索引创建、查询等核心功能实现,供学习参考:
创建索引
初始化IndexWriter配置,指定索引存储路径(需替换为实际路径):
Directory directory = FSDirectory.open(Paths.get("./index"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);
添加文档到索引需构建Document对象并添加Field字段:
Document doc = new Document();
doc.add(new TextField("content", "This is the text to be indexed", Field.Store.YES));
indexWriter.addDocument(doc);
完成文档添加后关闭IndexWriter释放资源:
indexWriter.close();
执行搜索
构建IndexSearcher并指定查询解析器:
DirectoryReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("content", analyzer);
解析查询字符串并执行搜索:
Query query = parser.parse("text");
TopDocs topDocs = searcher.search(query, 10);
遍历搜索结果并处理匹配文档:
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
System.out.println(document.get("content"));
}
字段类型说明
- TextField:适用于需要分词的文本内容,支持全文检索
- StringField:适用于不分词的精确匹配字段(如ID)
- StoredField:仅存储不索引的字段
注意事项
- 实际路径需替换为有效的文件系统路径
- 中文处理建议使用IKAnalyzer等中文分词器
- 生产环境需考虑索引优化和资源释放
- 查询结果默认按相关性评分排序
以上代码示例需根据实际需求调整字段名称和查询条件,建议结合官方文档深入理解各参数含义。
1524

被折叠的 条评论
为什么被折叠?



