py-py’s blog

何か書くよ

Elasticsearch復習

再び。

前回の記事の続きから。

今回はテキスト検索の基礎を書いていく。

範囲としては以下。

  • アナライザーの理解
  • ビルトインアナライザーの利用
  • カスタムアナライザーの実装

アナライザーの役割として、テキストをパースし、「語」に分割→それぞれをインデックスすることにある。
全てのフィールドのテキストは、ドキュメントがインデックスする前にアナライズされなければならない。

こんなんだろうなーという理解だと、「登録したデータをElasticsearchが検索しやすいよう、テキスト→単語に分割→それぞれにインデックスみたいなものつけてるんだなー」

でいいんじゃないでしょうか。

アナライザーの種類として以下が挙げられる。

  • Character filters: 0かそれ以上
  • Tokenizer: 一個だけ
  • Token filters: 0かそれ以上

Elasticsearchにアナライザーを設定した際に、データを投入すると以下のような流れでそれぞれがアナライズされる。

Character filter(s) → Tokenizer → Token filter(s)

Character filter

本書内ではサンプルとして「Chara Mapping Filter」を紹介している。

予め「こういう単語が来たらこう解釈する」ようなfilterである。

例:

:) is smile
: ( is sad
: D is laugh

"char_filter":{
    "my_char_filter":{
        "type":"mapping",
        "mappings":{
            ":) => _smile_",
            ":( => _sad_",
            ":D => _laugh_"
        }
    }
}

Character Filterはアナライズの一番最初に行われるため、次のTokenizerは常に置き換えられた文字を見ている。
Character Filterは文字の置き換えに非常に有効。

他のビルトインcharacter filtersは公式ドキュメントを参照だってさ。

Tokenizer

Tokenizerの役割は、入力されたテキストからトークンを発行させることである。
ここでいうトークンとは大雑把に言うと語に相当する。

今日はここまで。。