Elasticsearch のインデックス解析モジュールの概要 (アナライザやトークナイザなど)
Elasticsearch で kuromoji プラグイン を使用しようと思ったものの、解析 (analysis) 周りをちゃんと理解してなくて困ったりしたのでちゃんとドキュメントを読んだ。 Elasticsearch 0.90 現在の公式サイトのガイドを参考に、解析周りの概要をまとめておく。
Analysis: 解析について
- 参考ページ: Analysis
インデックス時とクエリ文字列の解析 (入力された文字列をどこで区切るのか、とか) にアナライザが使用される。 インデックス解析モジュールの記述 (?) でアナライザを定義できる。 インデックス解析モジュールとアナライザの概要は次の通り。
- インデックス解析モジュール (The index analysis module)
- アナライザ (Analyzer)
- アナライザは 1 つの トークナイザ (Tokenizer) と 0 個以上の トークンフィルタ (TokenFilters) からなる
- トークナイザの前に 1 つ以上の 文字フィルタ (CharFilters) が使用される場合もある
- 解析モジュールは論理名 (logical names) の下にトークンフィルタやトークナイザ、アナライザを登録することができる *1
- 論理名は次の箇所で使用できる:
- マッピングの定義 (mapping definitions)
- 特定の API
- 解析モジュールは、組み込みのアナライザとトークンフィルタ、トークナイザを自動的に登録する (明示的に定義されていない場合)
- 論理名は次の箇所で使用できる:
アナライザ
- 参考ページ: Analyzers
アナライザについてのより詳しい話。
- Elasticsearch には、すぐに使える組み込みのアナライザが付属している
- あるいは、組み込みの文字フィルタやトークナイザ、トークンフィルタを組み合わせて 独自のアナライザ を作ることもできる
デフォルトアナライザ
アナライザのエイリアス
アナライザにはエイリアスを張ることもできる。
index : analysis : analyzer : standard : alias: [alias1, alias2] type : standard stopwords : [test1, test2, test3]
上の例では、standard
という論理名のアナライザに、alias1
と alias2
という名前でエイリアスを張っている。
組み込みのアナライザについて
参考ページ 「Analyzers」 に組み込みのアナライザのリストがある。
トークナイザ (Tokenizers)
- 参考ページ: Tokenizers
トークナイザは、文字列を用語 (term) や字句 (token) の羅列に分割する。
Elasticsearch は組み込みのトークナイザを多く内蔵していて、独自のアナライザを定義するために使用することができる。 参考ページ 「Tokenizers」 に組み込みのトークナイザのリストがある。
トークンフィルタ (Token filters)
- 参考ページ: Token Filters
トークンフィルタはトークナイザから字句 (トークン) の羅列を受け取り、次のような処理を行うことができる:
Elasticsearch には多くの組み込みトークンフィルタが内蔵されていて、独自のアナライザを定義するのに使用することができる。 参考ページ 「Tokenizers」 に組み込みのトークンフィルタのリストがある。
文字フィルタ (Character filters)
- 参考ページ: Character Filters
文字フィルタは、トークナイザに渡される前の文字列に対して事前処理を行うために使用される。 例えば、HTML マークアップを除去したり、「&」 という文字を 「and」 に変換するのに用いられる。
Elasticsearch には組み込みの文字フィルタが内蔵されていて、独自のアナライザを定義するのに使用することができる。 参考ページ 「Character Filters」 に組み込みの文字フィルタのリストがある。