2

我们有一个名为 的多值索引字段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

4

1 回答 1

3

以下工作正常。

来自 Erik Hatcher(solr 用户邮件组):

Lucene 不允许内部纯否定子句。(不过,Solr 支持顶级否定从句,因此q=NOT foo可以按预期工作。)

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

q=tags:(flagged AND safe) OR (*:* AND NOT tags:flagged)
于 2013-05-13T20:32:10.253 回答