Lucene快速入门——索引的创建,检索,更新和删除
导读
创建索引
创建索引的过程如下:
// 1. 设置索引文件目录
Directory dir = FSDirectory.open(Paths.get(indexPath));
// 2. 构造IndexWriter
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
// 3. 构造Document,一个Document可以包含多个Field
Document doc = new Document();
doc.add(new StringField("path", file.toString(), Field.Store.YES));
doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)), Field.Store.YES));
// 4. 写入Document
writer.addDocument(doc);
writer.close();
检索索引
检索索引的过程如下:
// 1. 构造IndexSearcher
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);
// 2. 构造Query
Analyzer analyzer = new StandardAnalyzer();
QueryParser queryParser = new QueryParser("path", analyzer) ;
queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);
Query query = queryParser.parse(line);
// 3. 通过IndexSearcher进行查找
TopDocs results = searcher.search(query,10);
ScoreDoc[] hits = results.scoreDocs;
for (ScoreDoc hit:hits) {
Document doc = searcher.doc(hit.doc);
System.out.println(doc.get("path"));
}
更新索引
更新索引的过程和插入索引非常接近,主要的区别有两点:
1. 第2步构造IndexWriter的时候,IndexWriterConfig的OpenMode需要设置为OpenMode.CREATE_OR_APPEND:
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
writer.updateDocument(new Term("path", file.toString()), doc);
删除索引
Lucene索引可以根据Query对象来删除,可以根据Term来删除,也可以一次删除全部索引:
// 根据Query删除
// 1. 构造Query,省略,可以参考第2段构造Query的代码
Query query = xxx
// 2. 删除
writer.deleteDocuments(query);
// 根据Term删除
writer.deleteDocuments(new Term("path", file.getPath()));
// 删除全部索引
writer.deleteAll();
您可能还感兴趣:
阿尔法猪猪的技术荟
每周更新一篇原创的计算机领域的文章,偏Java技术栈,偏大数据方向。往期文章不定期修改(删繁就简/查漏补缺)。但愿日积跬步,以至千里。
Official Account