0

尽管上下文可能无关紧要,但我使用 Chewy gem 使用以下代码过滤 Elasticsearch 结果:

scope = scope.filter {
      (send('facet_properties').send(property_ids[0], :or) == val.map(&:to_i)) |
          (send('facet_properties').send(property_ids[1], :or) == val.map(&:to_i))
    }

我正在寻找一种方法来循环遍历每个元素,property_ids而不是调用property_ids[0],property_ids[1]等,由单独的分隔or。在实际使用property_ids中不会是固定长度。

4

1 回答 1

2

不确定您的结构到底是什么样的或您想要实现的确切目标,但您是否尝试过这样的事情?

vals = val.map(&:to_i)
prop_hash = Hash[property_ids.map{|prop| [prop,vals]}]
# alternately prop_hash = property_ids.each_with_object({}){|prop,obj| obj[prop] = vals}
scope.filter(facet_properties: {prop_hash}).filter_mode(:or)

由于chewy有一种#filter_mode方法可以为 where 条件设置连接类型,因此这似乎对您有用。

于 2014-10-28T13:39:29.620 回答