LoginSignup
2
1

More than 5 years have passed since last update.

Elasticsearchのquery周りのメモ

Last updated at Posted at 2016-11-18

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」だけがヒットする

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1