Rails中Solr服务如何传入数组参数查询industry_id多值字段
解决方案
你只需要把传入的数组转为空格分隔的字符串,外层包裹小括号即可匹配Solr的多值字段OR查询语法,修改后的代码如下:
# ids是数组 def suggest_jobs(ids) # 空数组提前返回,避免生成非法查询语句 return [] if ids.empty? q = "industry_id: (#{ids.join(' ')})" send_request(q) end def send_request(q_param) @solr.get 'select', params: { q: q_param } end
原写法问题说明
Ruby数组直接做字符串插值时会默认调用to_s方法,输出格式为[1, 2, 3],和Solr要求的多值查询语法不匹配。用join(' ')可以将数组元素转为空格分隔的字符串,外层套小括号后正好符合industry_id: (1 2 3)的语法要求,对应逻辑为industry_id包含1、2、3任意一个值。
可选优化(推荐)
如果该条件是纯过滤逻辑不需要参与相关性打分,建议将过滤条件放到fq(过滤查询)参数中,既可以提升查询性能,还能复用Solr的过滤缓存,修改如下:
def suggest_jobs(ids) return [] if ids.empty? industry_filter = "industry_id: (#{ids.join(' ')})" send_request(industry_filter) end def send_request(filter_param) @solr.get 'select', params: { q: '*:*', # 主查询默认匹配所有文档 fq: filter_param # 过滤逻辑独立放fq参数 } end
内容的提问来源于stack exchange,提问作者Hà Mai
相关产品推荐
相关产品推荐

