查找在一个字段中具有属性或在任何字段中没有该属性的所有文档

时间:2013-12-14 21:44:25

标签: solr

我正在尝试在Solr中构建一个过滤器查询,我可以返回测试x失败的用户集,或者既没有失败也没有通过,也没有被邀请测试x。这两个查询就像这样:

测试x失败的用户组。返回20个用户:

fq=failedAssessmentIds:986

既没有失败也没有通过,也没有被邀请测试x的用户组。返回1000个用户。

fq=(-failedTestIds:x AND -passedAssessmentIds:x AND -invitedAssessmentIds:986)

现在,当我将它们组合起来时:

fq=failedAssessmentIds:x OR (-failedTestIds:x AND -passedAssessmentIds:x AND -invitedAssessmentIds:x)

solr仅返回测试x失败的20个用户的集合,但不包括没有失败/通过/邀请测试x的1000个用户。如何将结果包含在两组中?

1 个答案:

答案 0 :(得分:1)

这样做:

fq = failedAssessmentIds:x OR( *:* AND -failedTestIds:x AND -passedAssessmentIds:x AND -invitedAssessmentIds:x)

原因是“Not”查询目的是从匹配中删除结果,它的功能是不查找结果。我知道这很令人困惑。因此,当您没有查询的第一部分时,当Solr只看到not查询时,它会自动执行MatchAllDocsQuery,然后删除与“not”查询不匹配的文档。但是,一旦添加第一部分(failedAssessmentIds:x),它就会找到这些文档,并尝试删除符合“非”标准的文档。