在 SOLR 查询中使用不等于或缺失

Using not equal or missing in SOLR query

正在寻找将以下表达式转换为 solr 查询的方法。

ISNULL(field) OR field != 1

我已经尝试了几种方法,

-field:1 OR -field:*

-(-field:1 AND field:*)

(-field:1 OR (*:* -field:*))

Solr 标准查询解析器不支持在字段中搜索 empty/null 值。在这种情况下,需要取消过滤器(排除字段中具有任何值的文档),以便查询保持有效。

但是,在否定子查询中使用通配符时,最好使用 range query 来防止不一致的行为。

所以ISNULL(field)变成了-field:[* TO *]

此外,当在同一个 fq 参数中应用过滤器和取反过滤器时,您需要在后者上添加 *:* 并确保第一个 - 运算符仅适用于第一个过滤器使用括号,否则 OR 将无法正确应用,.因此,如果要将此过滤器与其他过滤器结合使用,请确保过滤器与结果集相交(假设过滤器应适用于所有文档):

fq=(-field:[* TO *]) OR (*:* AND -field:<val>)

注意这等同于:

fq=-(field:[* TO *] AND field:<val>)

这意味着您只需要该部分(只要 <val> 不为空,即匹配值不同于 1 的值包括 null/empty 值):

fq=-field:<val>