【发布时间】:2015-11-30 17:48:55
【问题描述】:
我有一个行为异常的 SOLR 搜索。当我进入 SOLR 管理并运行以下搜索时,我得到了一个奇怪的行为(请注意,myField__s 只有两个可能的值,MyValue1 和 MyValue2)。
// 13,461 found - Good
fq:
// 9,168 found - Good
fq: myField__s:"MyValue1"
// 4,293 found - Good
fq: NOT myField__s:"MyValue1"
// 0 found - Bad, expected 13,461
fq: myField__s:"MyValue1" OR NOT myField__s:"MyValue1"
// 9,168 found - Good
fq: myField__s:"MyValue1" OR NOT myField__s:"MyValue2"
// 9,168 found - Bad, expected 13,461
fq: myField__s:"MyValue1" OR (NOT myField__s:"MyValue1")
我觉得我在 fq 语法方面遗漏了一些重要的东西。任何人都可以提供任何指导吗?
【问题讨论】:
-
你最后的结果让我有点吃惊。我原以为 Solr 处理了这种情况。不过,this answer 可能会为您指明正确的方向,为什么在 Solr 中的 NOT 查询可能有点难以预测。
-
我想我明白了,但
(myField__s:"MyValue1") OR (NOT (myField__s:"MyValue1"))通过 SOLR 转换为myField__s:MyValue1 (-myField__s:MyValue1)。阅读事物和您发布的答案让我认为这应该可行。 2个“主要”组件没有+或-所以它们应该是应该的。内部部分应该采取整套并删除与“MyValue1”匹配的任何内容。因此,这 2 个应该作为一个整体组合在一起。没有? -
是的,这也让我感到惊讶。如果您手动添加所有匹配项,您可能会有一些运气。比如:
myField__s:MyValue1 (*:* -myField__s:MyValue1) -
myField__s:"MyValue1" OR (*:* AND NOT myField__s:"MyValue1")确实按预期返回了所有结果。我想我必须手动将其添加到查询中的任何 NOT 中。谢谢你。如果您将其添加为答案,我会标记它。