SOLR / Lucene Facet查询 - OR和NOT

时间:2015-11-30 17:48:55

标签: solr lucene

我有一个意外行为的SOLR搜索。当我进入SOLR管理并运行以下搜索时,我得到一个奇怪的行为(请注意,myField__s只有2个可能的值,MyValue1MyValue2)。

// 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语法缺少一些重要的东西。任何人都可以提供任何指导吗?

1 个答案:

答案 0 :(得分:1)

Solr有布尔搜索的自由选项MUST,SHOULD和MUST_NOT。如果在某个术语之前包含NOT前缀,则表示您使用MUST_NOT选项将其添加到布尔查询中,因此具有此术语的文档将从搜索结果中排除。 (前缀AND转到MUST选项,前缀OR转到SHOULD OPTION)。换句话说,查询字符串

myField__s:"MyValue1" OR NOT myField__s:"MyValue1"

将被解析为

myField__s:"MyValue1" -myField__s:"MyValue1".

您可以在solr响应的fq字段中看到转换后的查询

{
  "responseHeader":{
    "status":0,
    "QTime":11,
    "params":{
      "debugQuery":"true",
      "indent":"true",
      "q":"some query",
      "wt":"json",
      "fq":"myField__s:MyValue1 -myField__s:MyValue1"],
......