如何使用 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

searchkick - 具有多个属性的自动完成

使用 ElasticSearch 的 Searchkick 返回“Faraday::ConnectionFailed: execution expired”

searchkick 索引相关模型字段

在 SearchKick 的命令行中仅重新索引单个模型

ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。