我们有一个名为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
答案 0 :(得分:3)
以下情况正常。
来自Erik Hatcher(solr-user邮件组):
Lucene不允许内部完全否定的条款。 (但是,Solr支持顶级否定子句,因此q=NOT foo
按预期工作。)
要使嵌套的否定子句起作用,请尝试以下方法:
q=tags:(flagged AND safe) OR (*:* AND NOT tags:flagged)