如何在Solr多值字段中筛选仅包含指定值的记录
问题
我有如下样本数据,其中Id是Solr的多值字段:
[ { "Name": "A", "Id": ["4","205","105"] }, { "Name": "B", "Id": ["4","205"] }, { "Name": "C", "Id": ["205"] }, { "Name": "D", "Id": ["205","205"] } ]
需要筛选出仅包含Id=205的记录,期望输出Name为C和D。
解决方案
要筛选出仅包含205作为Id值的记录,你可以用Solr的过滤查询(fq)组合两个条件:
写法一(通配符方式)
fq=Id:205 AND NOT Id:(* -205)
写法二(范围排除,更高效)
如果Id是数值类型,推荐用范围排除来避免通配符的性能损耗:
fq=Id:205 AND -Id:[* TO 204] AND -Id:[206 TO *]
逻辑说明
Id:205:保证记录至少包含一个205的Id值NOT Id:(* -205)/ 范围排除条件:排除所有存在非205Id值的记录,确保结果里的记录只有205(包括重复的205,比如D的情况)
这样查询就能精准得到你需要的C和D两条记录。
内容的提问来源于stack exchange,提问作者Vishal Kumawat
相关产品推荐
相关产品推荐

