1

マルチテナントアプリのタイヤジェムを介してelasticsearchを使用しようとしています。アプリには多くのアカウントがあり、各アカウントには多くのユーザーがいます。

ユーザー モデル:

  include Tire::Model::Search
  mapping do
    indexes :name, :boost => 10
    indexes :account_id
    indexes :company_name
  end

  def to_indexed_json
    to_json( :only => [:name, :account_id, :company_name], 
       )
  end

account_id に基づいてルーティングを追加したいと思います。これを達成する方法を教えてください。ルーティングを指定するには 2 つの方法があることがわかりました。

  1. ルーティング フィールドを使用したマッピング中
  2. エイリアスの使用

私は最初のオプションに興味があります。_routing をマッピング セクションにハッシュとして追加できることがわかりました。

  mapping :_routing => { :required => true, :path => :account_id } do
    indexes :name, :boost => 10
    indexes :account_id
    indexes :company_name
  end

検索クエリー:

  User.tire.search do
    query do
      filtered do
          query { string('ovamsikrishna@gmail.com') },
          filter :term, :account_id => 2
      end
    end
  end

検索クエリで何かを指定する必要がありますか? 上記のようにマッピングを指定すると (ルーティングを使用)、インデックス作成が行われません。ルーティングしなくても問題なく動作します。

4

1 に答える 1

0

account_idをパスとして追加すると、1つのシャードにすべて同じアカウントデータを蓄積するのに役立ちます。

すべてのシャードで検索クエリがヒットしないようにするためにも、検索クエリでルーティングを使用することをお勧めします。

Get Mapping APIを使用して、マッピングが正しく設定されているかどうかを確認します。

于 2012-11-09T23:52:54.340 に答える