Lucene快速入门——索引的创建,检索,更新和删除
Posted 阿尔法猪猪的技术荟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
您可能还感兴趣:
以上是关于Lucene快速入门——索引的创建,检索,更新和删除的主要内容,如果未能解决你的问题,请参考以下文章
大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建删除索引 + 新建搜索更新删除文档 + 条件查询 + 映射操作