Solr Lucene或查询不工作

Solr Lucene或查询不工作,solr,lucene,Solr,Lucene,我正试图用以下要求查询Solr: _我想获得所有没有特定字段的文档 -排他性:[*至*] 我想获取所有包含此字段并获得特定值的文档 排他性:(无) 因此,当我试图查询Solr 4时: fq=(-排他性:[*至*])或排他性:(无) 我只有在文档中存在字段且值为None但结果不包含第一次查询的结果时才能得到结果 我无法理解它为什么不起作用为了解释您的结果,查询(-exclusive:[*To*])将始终不会得到任何结果,因为您没有指定任何要检索的结果。默认情况下,Lucene不会检索任何结果,

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

-排他性:[*至*]

  • 我想获取所有包含此字段并获得特定值的文档
排他性:(无)

因此,当我试图查询Solr 4时:

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

我只有在文档中存在字段且值为None但结果不包含第一次查询的结果时才能得到结果


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

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

(-exclusive:[*TO*])
只指定不获取的内容,但不告诉它获取任何内容

Solr具有处理纯否定查询的逻辑(我相信,这与下面的方法大致相同,首先隐式检索所有文档),但从我收集的信息中,仅作为顶级查询,它不处理像
term1或-term2
这样的查询

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

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

这意味着,get(除具有排他性值的文档外的所有文档)或exclusivity=“None”

我找到了这个问题的答案。我做了一个错误的假设“-”在solr中是如何工作的。我认为

-排他性:[*至*]

向数据集中添加所有没有排他性字段的内容,但事实并非如此。“-”只能从数据集中排除内容。顺便说一句,femtoRgon您是对的,但我将其用作fq(过滤查询),而不是主查询,我忘记了提到这一点

所以解决办法是

-排他性:([*至*]和-(无))

完整查询如下所示

/q=*:*&fq=-排他性:([*至*]和-(无))


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

感谢您的回答。原始Lucene中
*:*
的解决方法--使用每个文档中的字段。例如,如果每个文档中都有
alltext
,则查询
alltext:
将检索所有文档documents@MarkLeightonFisher更好的方法是使用,它可以根据需要轻松地与
布尔查询中
Queryperser.parse
的结果合并。这样,您就不需要向索引中添加虚拟字段,也不需要允许前导通配符,也不需要对实际数据的性质做出不安全的假设,我不愿意这样做。