マルチテナントアプリでtiregemを介してelasticsearchを使用しようとしています。アプリには多くのアカウントがあり、各アカウントには多くのユーザーがいます。
ここで、アカウントIDに基づいてユーザーにインデックスを付けたいと思います。
ユーザーモデル:
include Tire::Model::Search
mapping do
indexes :name, :boost => 10
indexes :account_id
indexes :company_name
indexes :description
end
def to_indexed_json
to_json( :only => [:name, :account_id, :description, :company_name],
)
end
検索クエリー:
User.tire.search do
query do
filtered do
query { string 'vamsikrishna' }
filter :term, :account_id => 1
end
end
end
フィルタは正常に機能し、結果はフィルタされたアカウントID(1)に対してのみ表示されます。しかし、クエリ文字列1を検索すると、
User.tire.search do
query do
filtered do
query { string '1' }
filter :term, :account_id => 1
end
end
end
1という名前のユーザーがいるとします。その場合、結果はアカウントID1のすべてのユーザーとそのユーザーに対しても表示されます。これは、to_indexed_jsonにaccount_idを追加したためです。では、名前1のユーザーのみを表示するにはどうすればよいですか?(すべてのユーザーがヒットに参加できるわけではありません。名前が1のユーザーのみが表示されます)
名前、会社名、説明が1のユーザーがいない場合は、結果を表示したくありません。しかし、私の場合、説明したように、アカウントID1のすべてのユーザーを取得します。