如何修改Solr查询实现SUB属性多值全匹配过滤?
Solr多值字段全匹配查询修改方案
原查询的问题
你当前的fq=%2Bsub:5+7+8+10+820写法逻辑错误,等价于sub:5 AND 7 AND 8 AND 10 AND 820——其中7、8等数值没有指定匹配字段,Solr会用默认字段去匹配,完全达不到“同时包含所有指定sub值”的要求。
正确的查询语句
需要给每个指定值都显式绑定sub字段,并用必须匹配的逻辑(+或AND)连接,确保所有值都存在于目标文档的sub字段中:
写法1(用AND连接,URL编码后)
q=*:*&rows=100&start=0&sort=id+asc&fq=%2Bsub:5%20AND%20sub:7%20AND%20sub:8%20AND%20sub:10%20AND%20sub:820
写法2(用+代替AND,更简洁的Solr语法)
q=*:*&rows=100&start=0&sort=id+asc&fq=%2Bsub:5%2Bsub:7%2Bsub:8%2Bsub:10%2Bsub:820
注:%2B是URL编码后的+符号,在Solr中+表示该条件必须满足,多个+条件叠加就实现了“所有指定值同时存在”的过滤逻辑。
生效前提
只要你的sub字段配置了按空格拆分的分词器(比如StandardTokenizer),无论是单值的空格分隔字符串,还是多值字段(multiValued="true"),这个查询都能正确过滤出同时包含5、7、8、10、820的文档(即对象B和C),排除仅含部分值的对象A。
内容的提问来源于stack exchange,提问作者jetski
相关产品推荐
相关产品推荐

