Solr多值字段查询:筛选含非Test关键词的文档
Solr多值字段查询:排除仅含指定值的文档
针对你提供的多值字段场景,要获取Keywords数组中至少包含1个非"Test"值的文档(即返回ID1、2,排除ID3),可以用以下两种查询方式:
方法一:基于值存在的逻辑过滤
直接通过逻辑条件排除仅含"Test"的文档:
q=*:* fq=Keywords:* fq=-(Keywords:"Test" AND NOT (Keywords:* -Keywords:"Test"))
逻辑说明:
q=*:*:匹配所有文档fq=Keywords:*:过滤掉没有Keywords字段的文档fq=-(...):排除满足括号内条件的文档——也就是那些包含"Test"但不存在任何非"Test"值的文档
方法二:基于字段计数的函数查询(需开启docValues)
如果你的Keywords字段开启了docValues,可以通过计数对比精准排除所有值都是"Test"的文档:
q=*:* fq=Keywords:* fq=-(Keywords:"Test" AND {!func}sum(if(Keywords='Test',1,0)) eq {!func}count(Keywords))
逻辑说明:
{!func}sum(if(Keywords='Test',1,0)):统计Keywords中"Test"的出现次数{!func}count(Keywords):统计Keywords字段的总元素数- 当两者相等时,说明所有值都是"Test",这类文档会被排除
内容的提问来源于stack exchange,提问作者Ramesh Yadav
相关产品推荐
相关产品推荐

