elasticsearchを使った検索でfull text queryのsimple_query_string
の書き方で検索結果が違ってきたので、メモ
環境
- ruby-2.3系
- elasticsearch2.3 (Amazon elasticsearch service)
- gem
- elasticsearch-rails
やったこと
検索処理をrubyのgemを使ってやる時、query dslの作成時に以下のように組み立てた。データには
let!(:entry1) { create(:entry, name: 'ほげほげ1年11月_テスト', description: 'ほげほ1年11月_テストです。') }
let!(:entry2) { create(:entry, name: 'ほげほげ2年11月_テスト', description: 'ほげほげ2年11月_テストです。あれから1年') }
といった感じのを作って、
simple_query_string:
{ query: "#{@params[:keyword]}",
fields: ['name', 'description'],
default_operator: 'and',
}
@params[:keyword]
に「ほげほげ1年11月テスト」で検索した時、entry1だけヒットして欲しいところをentry2もヒットしてしまう。どうも「あれから1年」の1をと「ほげほげ」、「年11月テスト」等のため、検索にヒットしてしまうみたい。これだと検索精度が悪いので、ここと参考にして以下のように「""」で囲むようにする
simple_query_string:
{ query: "\"#{@params[:keyword]}\"",
fields: ['name', 'description'],
default_operator: 'and',
}
これで検索すると「entry1」だけがヒットする