1

Algolia レールを使用して検索を構築していますが、動的にソートするときに問題があります。たとえば、ユーザーはドロップダウンから選択して、価格の昇順または価格の降順で並べ替えることができます。

これがインデックスを定義した私のモデルです

class Product < ActiveRecord::Base
  include AlgoliaSearch

  algoliasearch per_environment: true, if: :publishable? do
    attribute :id, :name, :description, :seller_id, :condition, :location, :slug, :status, :city, :state, :stock_quantity,
      :shipping_method, :price
    attribute :created_at_i do
      created_at.to_i
    end
    attribute :updated_at_i do
      updated_at.to_i
    end
    attribute :price do
      price.to_f
    end
    attributesToIndex ['name', 'unordered(description)', 'seller_id',
      'condition', 'location', 'slug', 'created_at', 'updated_at', 'status',
      'geo(city)', 'geo(state)']
    geoloc :latitude, :longitude
    numericAttributesToIndex ["price", "stock_quantity"]
    attributesForFaceting ['price', 'condition', 'shipping_method']
  end

および製品コントローラー

def index
queries = { hitsPerPage: 5, page: params[:page].to_i, facets: '*',
      facetFilters: [
        "condition: #{params[:condition]}",
        "shipping_method: #{params[:shipping_method]}"
      ],
      numericFilters: [
        "price:#{params[:min_price] || 0} to #{params[:max_price] || 999999999999999}"
      ],
      sortBy: ["asc(price)"]
    }

    if latLng.present?
      queries[:aroundLatLng] = latLng
      queries[:aroundRadius] = radius
    end


    @response = Product.search(params[:query],queries)

Algolia は「無効なパラメーター sortBy」というエラーを返します。アルゴリアのドキュメントを検索しようとしましたが、情報が見つかりませんでした。助けてくれてありがとう。

4

1 に答える 1

2

以下は、Algolia のランキングがどのように機能するかを理解するのに役立つ、Algolia の Web サイトの関連ドキュメント ページのリストです。

  • [はじめに] ランキングと関連性の微調整

    当社のエンジンが非常に高速な理由は、各インデックスに独自の設定とランキングがあるためです。これは、データを複数のインデックスに保存することで、検索可能な属性と属性ランキングの関連性のさまざまなセットを作成できることを意味します。これは、マスター インデックスとシームレスに同期されるスレーブ インデックスを使用して実現されます。次に、各スレーブ インデックスを独自の一連のビジネス メトリックで構成して、関連性の計算を調整できます。

    インデックスには、変更できない特定のランキング式があります。ただし、別のランキング式でスレーブ インデックスを使用することで、この制限を簡単に克服できます。

  • [チュートリアル][ランキング計算式] タイブレーク アルゴリズム
    [よくある質問] Algolia のタイブレーク アルゴリズムはどのように機能しますか?
    これらの 2 つのリンクは、Algolia のランキングがどのように機能し、どのように調整できるかを理解するのに役立ちます。基本的に、ユースケースによっては、テキストの関連性の前に価格でソートすることはあまり意味がありません。そのため、ユース ケースに応じて、 を に変更したりcustomRanking、ランキング式の先頭に属性priceを追加したりすることができます。price

  • [よくある質問] 奴隷指数とは何ですか? その利点は何ですか?
    この最後のリンクでは、Algolia の「スレーブ インデックス」とは何かについて詳しく説明しています。
  • [Rails ドキュメント] 複数の並べ替え基準
    [Rails GitHub ドキュメント] マスター/スレーブ
    これらの最後のリンクでは、複数のスレーブで Algolia の Rails クライアントを使用したコード例を見つけることができます。最初のものは実際にあなたのユースケースを正確に示しています: 価格によるソート.

これらすべてを念頭に置いて、最終的には、これらをモデルに追加するだけです(方法を使用したい場合customRanking):

add_slave 'Product_by_price_asc', per_environment: true do
  customRanking ['asc(price)']
end

add_slave 'Product_by_price_desc', per_environment: true do
  customRanking ['desc(price)']
end

次に、コントローラーで、この方法でクエリを実行できます

query_params = { slave: "Product_by_price_#{params[:sort_order]}", hitsPerPage: 5, ... }
Product.search params[:query], query_params

Algolia のインスタント検索機能を完全に使用できるようにするには、おそらくフロントエンドでもこの実装を行う必要があります。 [FAQ] フロントエンドまたはバックエンドからの検索を参照してください。

于 2016-01-15T10:54:39.707 に答える