小编dig*_*ter的帖子

Lucene:过滤不包含Term的文档

我有一个索引,其文档有两个字段(实际上更像是800个字段,但其他字段在这里不关心我们):

  • contents字段包含文档的分析/标记化文本.在此字段中搜索查询字符串.
  • category字段包含文档的单个类别标识符.大约有2500个不同的类别,其中有几个可能出现文档(即文档可能有多个category条目.结果会被此字段过滤.

该指数包含约20 mio.文件,大小为5 GB.

使用用户提供的查询字符串以及用户感兴趣的几个类别的可选集合来查询索引.问题是:如何删除不仅与查询字符串匹配而且还与不需要的类别匹配的文档.

我可以使用BooleanQuery带有MUST_NOT子句的东西,例如:

BooleanQuery q = new BooleanQuery();
q.add(contentQuery, BooleanClause.MUST);
for (String unwanted: unwantedCategories) {
    q.add(new TermsQuery(new Term("category", unwanted), BooleanClause.MUST_NOT);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用Lucene过滤器做到这一点?性能在这里是一个问题,并且只会有一些,反复出现的变体unwantedCategories,因此CachingWrapperFilter可能会有很大帮助.此外,由于Lucene查询在现有代码库中生成的方式,很难适应这种情况,而Filter可以轻松引入额外的查询.

换句话说,如何Filter根据文档中必须出现的条款创建?

java lucene search filter

4
推荐指数
1
解决办法
4394
查看次数

标签 统计

filter ×1

java ×1

lucene ×1

search ×1