20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

elasticsearchのCompletion Suggesterをさわる

最近、検索エンジン及びサジェストエンジンとして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でサジェストの優先順位をつけることができるっぽいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
20
Help us understand the problem. What are the problem?