dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

Elasticsearch でカタカナとひらがなを区別せずに検索

2021-10-21 22:58:22 | elasticsearch
Elasticsearch でカタカナとひらがなを区別せずに検索できるようにする方法のメモ。

日本語では「リンゴ」と「りんご」など、カタカナでもひらがなの両方で表記する単語があります。
ひらがなで検索してもカタカナで表記されている文書を漏れなく検索できるようにするために、
ひらがなをカタカナに変換する filter を設定します。

まず、日本語解析器の設定を行います。
curl "http://localhost:9200/test1?pretty" \
     -XPUT \
     -H 'Content-Type: application/json' \
     -d '
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ja_text_analyzer1": {
          "type": "custom",
          "tokenizer": "kuromoji_tokenizer",
          "filter": [
            "icu_normalizer",
            "kuromoji_baseform",
            "to_katakana"
          ]
        }
      },
      "filter": {
        "to_katakana": {
          "type": "icu_transform",
          "id": "Hiragana-Katakana"
        }
      }
    }
  }
}
'

Hiragana-Katakana の filter によって、ひらがなをカタカナに変換します。
実際に日本語文字列を解析すると、以下のようにひらがながカタカナに変換された解析結果が得られます。
curl "http://localhost:9200/test1/_analyze?pretty" \
     -XGET \
     -H 'Content-Type: application/json' \
     -v \
     --data '
{
     "analyzer": "ja_text_analyzer1",
     "text": "私は日本人です"
}'

解析結果では、ひらがながカタカナに変換されています。
{
  "tokens" : [
    {
      "token" : "私",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "ハ",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "日本人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "デス",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "word",
      "position" : 3
    }
  ]
}


この記事についてブログを書く
« VSCode での emacs のキーバ... | トップ | node.js での json オブジェ... »

elasticsearch」カテゴリの最新記事