2

我正在尝试在 Rails 4 应用程序中使用弹性搜索和轮胎创建搜索页面。我想要完成的是,如果用户访问 /crews,系统会显示带有方面搜索等的船员列表页面,并加载 20 个最后添加的记录。因此,当用户第一次点击页面时,Elasticsearch 应该在没有给出查询的情况下默认返回 20 条记录。

因此,在我对机组人员的索引操作中,我调用了搜索方法

  def index
    @crews = Crew.search(params)
  end

这是我在没有给出“查询”时返回所有值的搜索方法:

  def self.search(params={})

    tire.search(page: params[:page], per_page: 20) do
      query do
        boolean do
          must { string params[:query], default_operator: "AND" } if params[:query].present?
          # just list all if no query given
          must { string "*"} if params[:query].nil?
        end
      end

      filter :term, 'crew_status.name.exact' => params[:crew_status] if params[:crew_status].present?
      sort { by :updated_at, "desc" } if params[:query].blank?

      facet "status" do
        terms :crew_status_id
        terms 'crew_status.name.exact'
      end
      # raise to_curl
    end
  end

这可行,但是当在 Elasticsearch 中找不到任何记录时,Tire 会给出错误“SearchPhaseExecutionException [Failed to execute phase [query]”,并且这个当前的解决方案也感觉像一个黑客,我想知道如何以正确的方式完成我的首选行为。如果没有给出查询,那只是加载所有记录,如果结果为 0,则不会出错。

我以前与 Sunspot 合作过,因为我没有弄错我想让我的工作人员#index 页面工作的方式是 Sunspot 的默认设置。我希望有人可以帮助我,并为我指明正确的方向,以便在 Tyre / Elasticsearch 中正确执行此操作。

提前致谢!

问候,丹尼尔

4

0 回答 0