如何使用 searchkick 进行复杂的逻辑操作查询
Posted
技术标签:
【中文标题】如何使用 searchkick 进行复杂的逻辑操作查询【英文标题】:How to do complex querying with logical operations by using searchkick 【发布时间】:2015-03-06 04:43:58 【问题描述】:我正在使用 searchkick 库作为产品搜索的弹性搜索客户端。 https://github.com/ankane/searchkick
可以创建'OR'条件和'AND'条件;
AND 运算 Product.search where: price: lte: 200, in_stock: true
或运算 Product.search where: or: [[in_stock: true, backordered: true]]
但我坚持使用 searchkick 创建 多个 'AND' 'OR' 条件。
我需要类似的东西
A OR B OR (C AND D)
或者我需要这样,
A AND B AND (C OR D)
请指导我,如何实现这一目标
谢谢
【问题讨论】:
得到答案 A OR B OR (C AND D) Product.search where: or: [[brand: 'nike', in-stock: true, price: lte: 12, color: 'red']] A AND B AND (C OR D) Product.search where: brand: 'nike', in-stock: true, or: [ [price: lte : 12, color: 'red'] ] 你应该回答你自己的问题。这样,您可以通过突出显示答案并表明该问题已解决来帮助社区。你也会得到积分;) 【参考方案1】:A OR B OR (C AND D)
Product.search where: or: [[brand: 'nike', in-stock: true, price: lte: 12, color: 'red']]
A AND B AND (C OR D)
Product.search where: brand: 'nike', in-stock: true, or: [ [price: lte: 12, color: 'red'] ]
更新
(A OR B) AND (C OR D)
Product.search where: or: [[ or: [[brand: "nike", in-stock: "true"]]], [or: [[price: 100, color: "red"]]]]
【讨论】:
为什么地狱或条件有方括号,我花了很多时间弄清楚它有方括号。谢谢 谢谢迪亚斯。你知道怎么做 (A OR B) AND (C OR D) 应该在官方文档中。救生员以上是关于如何使用 searchkick 进行复杂的逻辑操作查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 4.1 中使用 Searchkick gem 在 Elasticsearch 中设置 Facets
使用 ElasticSearch 的 Searchkick 返回“Faraday::ConnectionFailed: execution expired”
ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。