过滤器查询中多值字段的Solr布尔查询

时间:2013-05-07 20:45:24

标签: solr

我们有一个名为tags的多值索引字段。我们希望通过过滤查询找到满足以下条件之一的所有文档:

  • 如果标记flagged存在,则标记safe也应该存在。
  • 标记flagged不存在。

我尝试了fq=(tags:(flagged AND safe) OR -tags:flagged),但它没有返回所需的结果。相反,它会返回标记为safe且未标记flagged的文档,即结果与此查询相同:fq=(tags:safe AND -tags:flagged)。如何修复查询?

fq=(tags:safe AND -tags:flagged)fq=(tags:safe OR -tags:flagged)同时返回相同的结果。这是为什么?

Solr版本:3.6.2

1 个答案:

答案 0 :(得分:3)

以下情况正常。

来自Erik Hatcher(solr-user邮件组):

Lucene不允许内部完全否定的条款。 (但是,Solr支持顶级否定子句,因此q=NOT foo按预期工作。)

要使嵌套的否定子句起作用,请尝试以下方法:

q=tags:(flagged AND safe) OR (*:* AND NOT tags:flagged)