lucene使用多项查询删除文档


介绍

如果文档中有主键字段(如传统SQL数据库),则可以轻松地从Lucene索引中删除文档。

但是,有时根据文档中的多个字段删除大量文档是您所需要的。 Lucene API允许您通过指定要用于删除的查询来实现此目的。

为此,选择正确的Analyzer,构造查询,将查询传递给indexWriter以删除文档。

句法

  1. indexWriter.deleteDocuments(multiTermQuery);
  2. 查询multiTermQuery = new QueryParser(“”,analyzer).parse(“field_name1:”field value 1“AND field_name2:”field value 2“”);
  3. BooleanQuery multiTermQuery = new BooleanQuery(); multiTermQuery.add(new TermQuery(new Term(“field_name1”,“field value 1”)),BooleanClause.Occur.MUST); multiTermQuery.add(new TermQuery(new Term(“field_name2”,“field value 2”)),BooleanClause.Occur.MUST);

备注

选择分析器的注意事项

它并不是很明显,但您使用的分析器会对查询的运行方式产生巨大影响。这是因为StandardAnalyzer过滤掉常见的英语单词,如“the”和“a”。您可能希望选择不同的分析器(如KeywordAnalyzer)以使其完全匹配。这显然取决于你对Lucene的应用当然。

使用多项查询删除文档 相关例子