如何在 Solr 中合并对空值的查询?

How to combine queries for empty values in Solr?

我正在尝试查询具有空字段值的 solr 文档,但无法执行:

假设文档有两个可能为空的字段 name_dename_en.

in the solr docs所述查询其中一个工作正常:

-name_de:[* TO *]

但是当我开始组合多个此类查询时,答案却不是我所期望的:

-name_de:[* TO *] OR -name_en:[* TO *]

应该提供类似于我认为的两个查询的联合。然而事实并非如此。我根本不明白答案:在我的例子中,我通过查询 name_de 交付了 1310 份文档,通过查询 name_en 交付了 1319 份文档——如上所示将两者结合起来得到 950 份文档。

据我了解 Solr 文档:

Pure negative queries (all clauses prohibited) are allowed (only as a top-level clause)

这些 "pure negative queries" 无法组合,并且开箱即用的 Lucene 不支持全部功能,但 Solr 的标准查询解析器 "extension" 支持。

但是我一直没能找到相关资源来更清楚地说明空值的正确处理方式,我想知道我的方法是否完全错误。

有人能告诉我如何在 Solr 中正确处理/查询这些空值吗?

PS: 尝试合并 the exists function 也没有成功:调用这些总是交付所有文档,无论它们在 name_dename_en.

中的内容如何

通常当您"subtracting"结果中的某些内容时,您必须更加具体:

(*:* -name_d:[* TO *]) OR (*:* -name_en:[* TO *])

在您的第一种情况下,*:* 隐式添加在前面,因为这是查询中的唯一术语,您会得到预期的结果。但是,在您的第二种情况下,*:* 只会在第一组文件前面加上前缀,而不是在 OR.

之后的第二组文件。

显式添加完整的文档集(由 *:* 表示),以便我们在找到与该术语匹配的文档集之前可以减去一些内容。