アナライザーの構造
アナライザー(analyzer)は、組み込みのものでもカスタムのものでも、character filters、tokenizers、token filtersの3つの低レベルの構成要素を含むパッケージです。
組み込みのanalyzersは、これらの構成要素を異なる言語やテキストの種類に適したアナライザーに事前にパッケージ化しています。Elasticsearchは、個々の構成要素も公開しており、それらを組み合わせて新しいcustom
アナライザーを定義することができます。
文字フィルター
文字フィルター(character filter)は、元のテキストを文字のストリームとして受け取り、文字を追加、削除、または変更することでストリームを変換できます。たとえば、文字フィルターはヒンドゥー・アラビア数字(٠١٢٣٤٥٦٧٨٩)をアラビア・ラテン数字(0123456789)に変換したり、ストリームからHTML要素のような<b>
を削除したりするために使用できます。
アナライザーはゼロまたはそれ以上のcharacter filtersを持つことができ、これらは順番に適用されます。
トークナイザー
トークナイザー(tokenizer)は、文字のストリームを受け取り、それを個々のトークン(通常は個々の単語)に分割し、トークンのストリームを出力します。たとえば、whitespace
トークナイザーは、空白を見たときにテキストをトークンに分割します。これは、テキスト"Quick brown fox!"
を[Quick, brown, fox!]
という用語に変換します。
トークナイザーは、各用語の順序または位置、およびその用語が表す元の単語の開始および終了の文字オフセットを記録する責任も負います。
アナライザーは正確に1つのtokenizerを持たなければなりません。
トークンフィルター
トークンフィルター(token filter)は、トークンのストリームを受け取り、トークンを追加、削除、または変更することができます。たとえば、lowercase
トークンフィルターはすべてのトークンを小文字に変換し、stop
トークンフィルターはthe
のような一般的な単語(stop words)をトークンのストリームから削除し、synonym
トークンフィルターはトークンのストリームに同義語を導入します。
トークンフィルターは、各トークンの位置や文字オフセットを変更することは許可されていません。
アナライザーはゼロまたはそれ以上のtoken filtersを持つことができ、これらは順番に適用されます。