在SOLR查询中使用不相等或遗漏

fumotvh3  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(287)

寻找一种方法来转换下面的表达式到solr查询。
-field:1 OR -field:*
我试过几种方法,
-field:1 OR -field:*
-(-field:1 AND field:*)
(-field:1 OR (*:* -field:*))

qhhrdooz

qhhrdooz1#

Solr标准查询解析器不支持在字段中搜索空值。在这种情况下,需要取消过滤器(排除字段中具有任何值的文档),以便查询保持有效。
但是,最好使用范围查询,以防止在否定子查询中使用通配符时出现不一致的行为。
所以ISNULL(field)变成了-field:[* TO *]
另外,在同一个fq参数中应用一个过滤器和一个求反过滤器时,需要在后者上添加*:*,并使用括号确保第一个-运算符仅应用于第一个过滤器,否则OR将无法正确应用。因此,如果要将此过滤器与其他过滤器组合,请确保该过滤器与结果集相交(假设该过滤器应应用于所有文档):

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

请注意,这相当于:

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

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

fq=-field:<val>

相关问题