LoginSignup
19

More than 5 years have passed since last update.

elasticsearchのCompletion Suggesterをさわる

Last updated at Posted at 2014-04-26

最近、検索エンジン及びサジェストエンジンとしてelasticsearchを検討しているのでメモ。

Completion Suggesterとは

登録されたワードを前方一致で検索する機能。「ピ」っていれたら「ピンクフロイド」が出たり「ジ」っていれたら「ジェネシス」って出るアレを実現する技術。

公式ドキュメント

mappingの登録

PUT /music/song/_mapping
{
  "song": {
    "properties": {
      "name": {"type": "string"},
      "artist": {"type": "string"},
      "released": {"type": "integer"},
      "suggest": {
        "type": "completion",
        "index_analyzer": "simple",
        "search_analyzer": "simple"
      }
    }
  }
}

データ登録

先ほどのマッピングに合うデータを登録します。

この時、mappingで定めたpropertiesに加えてsuggest属性を登録しておくのがミソ。

このsuggestキーに登録された値が前方一致の対象になります。

// データ1
PUT /music/song/1
{
  "name": "Love in your Eyes",
  "artist": "Caravan",
  "released": "13123131",
  "suggest": "Love in your Eyes"
}


// データ2
PUT /music/song/2
{
  "name": "Lovely Baby",
  "artist": "Unknown",
  "released": "13123131",
  "suggest": "Lovely Baby"
}

クエリ発行

/インデックス名/_suggestに対してPOSTします。(typeは含めない)。

song-suggestの部分は何でもいいっぽいです。サジェスト結果がこのキー名で参照できます。

POST /music/_suggest
{
  "song-suggest": {
    "text": "love",
    "completion": {
      "field": "suggest"
    }
  }
}

// 結果
{
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "song-suggest": [
      {
         "text": "love",
         "offset": 0,
         "length": 4,
         "options": [
            {
               "text": "Love in your Eyes",
               "score": 1
            },
            {
               "text": "Lovely Baby",
               "score": 1
            }
         ]
      }
   ]
}

その他

データ登録時にpayloadでサジェスト結果にデータを付加したり、weightでサジェストの優先順位をつけることができるっぽいです。

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
19