Lucene快速入门——索引的创建,检索,更新和删除
导读
创建索引
创建索引的过程如下:
// 1. 设置索引文件目录Directory dir = FSDirectory.open(Paths.get(indexPath));// 2. 构造IndexWriterAnalyzer analyzer = new StandardAnalyzer();IndexWriterConfig iwc = new IndexWriterConfig(analyzer);iwc.setOpenMode(OpenMode.CREATE);IndexWriter writer = new IndexWriter(dir, iwc);// 3. 构造Document,一个Document可以包含多个FieldDocument 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. 写入Documentwriter.addDocument(doc);writer.close();
检索索引
检索索引的过程如下:
// 1. 构造IndexSearcherIndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));IndexSearcher searcher = new IndexSearcher(reader);// 2. 构造QueryAnalyzer 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
