Searchkick多分类筛选逻辑问题:需将AND改为OR实现跨类别搜索
解决Searchkick多筛选器的OR逻辑需求
我完全懂你的痛点——因为产品只会归属单一类别,默认的AND逻辑会要求产品同时匹配showers_ids和accessories_ids的条件,这当然搜不到结果。要实现跨筛选器的OR逻辑,你需要用Searchkick的复合查询语法来重构where条件:
Product.search( "shower", fields: [:name], where: { or: [ { showers_ids: [46, 41] }, { accessories_ids: [104, 102] } ] }, aggs: [:showers_ids, :accessories_ids, :bath_ids] )
这段代码的逻辑是:
- 把每个筛选条件包装成独立的哈希,放到
or数组里 - 最终查询会变成:
(showers_ids IN [46,41]) OR (accessories_ids IN [104,102]) - 这样就能把所有属于选中的淋浴类别或配件类别的产品都找出来,完美匹配你的需求
如果之后需要新增其他类别筛选(比如bath_ids),直接在or数组里追加新的条件哈希就可以:
or: [ { showers_ids: [46, 41] }, { accessories_ids: [104, 102] }, { bath_ids: [12, 15] } # 新增的浴品类筛选 ]
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

