2

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

-排他性:[* TO *]

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

排他性:(无)

因此,当我尝试使用以下命令查询 Solr 4 时:

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

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

我不明白为什么它不起作用

4

2 回答 2

1

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

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

Solr 具有处理纯否定查询的逻辑(我相信,与下面的方式大致相同,首先隐式检索所有文档),但据我收集的信息,仅作为顶级查询,它不处理term1 OR -term2 此处记录的查询.

我相信使用 solr 您应该能够使用查询*:*来获取所有文档(尽管在原始 lucene 中不可用),因此您可以使用查询:

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

这意味着,获取(除具有排他性值的文档之外的所有文档)或排他性 =“无”的文档

于 2013-01-24T16:31:10.880 回答
0

我已经找到了这个问题的答案。我做出了错误的假设“-”在 solr 中是如何工作的。尽管如此

-排他性:[* TO *]

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

所以解决方案就像

-排他性:([* TO *] AND -(None))

完整的查询看起来像

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

所以这意味着我将得到所有不具有字段独占性或具有此字段的内容,并且它填充了值 None。

于 2013-01-24T20:02:01.610 回答