我正在尝试在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个用户。如何将结果包含在两组中?
答案 0 :(得分:1)
这样做:
fq = failedAssessmentIds:x OR( *:* AND -failedTestIds:x AND -passedAssessmentIds:x AND -invitedAssessmentIds:x)
原因是“Not”查询目的是从匹配中删除结果,它的功能是不查找结果。我知道这很令人困惑。因此,当您没有查询的第一部分时,当Solr只看到not查询时,它会自动执行MatchAllDocsQuery,然后删除与“not”查询不匹配的文档。但是,一旦添加第一部分(failedAssessmentIds:x),它就会找到这些文档,并尝试删除符合“非”标准的文档。