或使用Tire / Elastic进行查询

时间:2012-07-23 14:57:02

标签: ruby-on-rails-3 elasticsearch tire

这可能很简单,但我无法解决。我在Project类上有这个轮胎/ elasicsearch查询:

  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字符串) 非常感谢!

1 个答案:

答案 0 :(得分:5)

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

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

或类似的动态值:

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

有关详细信息和背景信息,请参阅this part of Tire documentation