Lucene OR查询不起作用

时间:2013-01-24 15:14:12

标签: solr lucene

我正在尝试使用以下要求查询Solr: _我想获得所有没有特定字段的文件

  

-exclusivity:[* TO *]

  • 我想获取所有包含此字段并获得特定值的文档
  

排他性:(无)

所以当我试图用:

查询Solr 4时

fq =( - 排他性:[* TO *])或排他性:(无)

如果该字段存在于文档中且值为None但结果不包含第一次查询的结果,则我只得到结果!!

我无法理解为什么它不起作用

2 个答案:

答案 0 :(得分:1)

为了解释您的结果,查询(-exclusivity:[* TO *])将始终没有结果,因为您尚未指定任何要检索的结果。默认情况下,Lucene不会检索任何结果,除非您告诉它获取它们。 exclusivity:(None)不是对完整结果集的限制,它是用于查找要检索的文档的键。这与数据库不同,数据库默认返回表中的所有记录,并允许您限制集。

(-exclusivity:[* TO *])仅指定不能获得的内容,但不会告诉它任何内容。

Solr有处理纯负面查询的逻辑(我相信,与下面的方式大致相同,首先隐式检索所有文档),但是从我收集的内容来看,只作为顶级查询,并且它不处理查询例如term1 OR -term2 documented here

我相信使用solr你应该能够使用查询*:*来获取所有文档(虽然这在原始lucene中不可用),所以你可以使用查询:

(*:* -exclusivity:[* TO *]) exclusivity:(None)

这意味着,get(所有文档除了那些具有独占性值的文档)或docs exclusivity =“None”

答案 1 :(得分:0)

我已经找到了解决这个问题的方法。我已经做了一个错误的假设,“ - ”在solr.I虽然那个

  

-exclusivity:[* TO *]

将没有排他性字段的所有内容添加到数据集中,但事实并非如此。 ' - '只能从数据集中排除内容。 BTW femtoRgon你是对的,但我使用它作为fq(过滤器查询)而不是作为主查询我忘记提及。

所以解决方案就像

  

-exclusivity:([* TO *] AND - (None))

和完整查询看起来像

/?q = *:*& fq = -exclusivity:([* TO *] AND - (None))

这意味着我将获得所有内容没有字段排他性或具有此字段,并且填充值为None。