1

这可能很简单,但我无法解决。我在项目类上有这个轮胎/弹性搜索查询:

  def self.search(params)
    tire.search(load: true, page: params[:page], per_page: 8) do
      query do
        boolean do
          must { string params[:query], default_operator: "AND" } if params[:query].present?
          must { term :status, "posted" }
          must { term :budget, params[:budget] } if params[:budget].present?
        end
      end
    end
  end

我需要状态词来搜索“已发布”或“关闭”,但无法解决。我尝试了 term :status, ["posted", "closed"] 但这不会返回结果,因此可能会执行 AND。感谢这里正确的轮胎语法。(注意不是在这里寻找 jason/elasticsearch 字符串)非常感谢!

4

1 回答 1

5

您需要的是一个terms查询,它执行OR作为数组传递的术语之间:

must { terms :status, ["posted"] }

或类似的动态值:

# params[:status] can be single value or array
must { terms :status, Array(params[:status]) }

有关更多信息和上下文,请参阅轮胎文档的这一部分。

于 2012-07-25T10:00:06.570 回答