2

Rails 4アプリでelasticsearchとTireを使用して検索ページを作成しようとしています。私が達成したいのは、ユーザーが /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 [フェーズ [クエリ] を実行できませんでした」というエラーを返します。この現在のソリューションもハックのように感じられ、正しい方法で自分の好みの動作を達成する方法を考えています。これは、クエリが指定されていない場合はすべてのレコードをロードするだけで、結果が 0 の場合はエラーになりません。

以前に Sunspot を使用したことがありますが、間違っていないので、クルー #index ページを機能させる方法は Sunspot のデフォルトです。誰かがこれを手伝ってくれて、Tire / Elasticsearch でこれを正しく行うための正しい方向を教えてくれることを願っています。

前もって感謝します!

こんにちは、ダニエル

4

0 に答える 0