Elasticsearch-分析
検索操作中にクエリが処理されると、任意のインデックスのコンテンツが分析モジュールによって分析されます。このモジュールは、アナライザー、トークナイザー、tokenfilters、charfiltersで構成されています。アナライザーが定義されていない場合、デフォルトでは、組み込みのアナライザー、トークン、フィルター、およびトークナイザーが分析モジュールに登録されます。
次の例では、他のアナライザーが指定されていない場合に使用される標準アナライザーを使用します。文法に基づいて文を分析し、文で使用される単語を生成します。
POST _analyze
{
"analyzer": "standard",
"text": "Today's weather is beautiful"
}
上記のコードを実行すると、次のような応答が得られます。
{
"tokens" : [
{
"token" : "today's",
"start_offset" : 0,
"end_offset" : 7,
"type" : "",
"position" : 0
},
{
"token" : "weather",
"start_offset" : 8,
"end_offset" : 15,
"type" : "",
"position" : 1
},
{
"token" : "is",
"start_offset" : 16,
"end_offset" : 18,
"type" : "",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 19,
"end_offset" : 28,
"type" : "",
"position" : 3
}
]
}
標準アナライザーの構成
カスタム要件を取得するために、さまざまなパラメーターを使用して標準アナライザーを構成できます。
次の例では、max_token_lengthが5になるように標準アナライザーを構成します。
このために、最初にmax_length_tokenパラメーターを持つアナライザーを使用してインデックスを作成します。
PUT index_4_analysis
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
}
}
}
}
次に、以下に示すテキストを使用してアナライザーを適用します。トークンは最初に2つのスペースがあり、最後に2つのスペースがあるため、表示されないことに注意してください。「is」という単語の場合、先頭にスペースがあり、末尾にスペースがあります。それらすべてをとると、スペース付きの4文字になり、単語にはなりません。カウントされる単語にするために、少なくとも最初または最後に非スペース文字が必要です。
POST index_4_analysis/_analyze
{
"analyzer": "my_english_analyzer",
"text": "Today's weather is beautiful"
}
上記のコードを実行すると、次のような応答が得られます。
{
"tokens" : [
{
"token" : "today",
"start_offset" : 0,
"end_offset" : 5,
"type" : "",
"position" : 0
},
{
"token" : "s",
"start_offset" : 6,
"end_offset" : 7,
"type" : "",
"position" : 1
},
{
"token" : "weath",
"start_offset" : 8,
"end_offset" : 13,
"type" : "",
"position" : 2
},
{
"token" : "er",
"start_offset" : 13,
"end_offset" : 15,
"type" : "",
"position" : 3
},
{
"token" : "beaut",
"start_offset" : 19,
"end_offset" : 24,
"type" : "",
"position" : 5
},
{
"token" : "iful",
"start_offset" : 24,
"end_offset" : 28,
"type" : "",
"position" : 6
}
]
}
さまざまなアナライザーのリストとその説明を以下の表に示します。
S.No | アナライザーと説明 |
---|---|
1 |
Standard analyzer (standard) このアナライザーには、ストップワードとmax_token_length設定を設定できます。デフォルトでは、ストップワードリストは空で、max_token_lengthは255です。 |
2 |
Simple analyzer (simple) このアナライザーは小文字のトークナイザーで構成されています。 |
3 |
Whitespace analyzer (whitespace) このアナライザーは、空白のトークナイザーで構成されています。 |
4 |
Stop analyzer (stop) stopwordsとstopwords_pathを構成できます。デフォルトでは、英語のストップワードに初期化されたストップワードとstopwords_pathには、ストップワードを含むテキストファイルへのパスが含まれています。 |
トークナイザー
トークナイザーは、Elasticsearchのテキストからトークンを生成するために使用されます。テキストは、空白やその他の句読点を考慮してトークンに分割できます。Elasticsearchには、カスタムアナライザーで使用できるトークン化機能が多数組み込まれています。
文字ではない文字に遭遇するたびにテキストを用語に分割するが、すべての用語を小文字にするトークナイザーの例を以下に示します。
POST _analyze
{
"tokenizer": "lowercase",
"text": "It Was a Beautiful Weather 5 Days ago."
}
上記のコードを実行すると、次のような応答が得られます。
{
"tokens" : [
{
"token" : "it",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "was",
"start_offset" : 3,
"end_offset" : 6,
"type" : "word",
"position" : 1
},
{
"token" : "a",
"start_offset" : 7,
"end_offset" : 8,
"type" : "word",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 9,
"end_offset" : 18,
"type" : "word",
"position" : 3
},
{
"token" : "weather",
"start_offset" : 19,
"end_offset" : 26,
"type" : "word",
"position" : 4
},
{
"token" : "days",
"start_offset" : 29,
"end_offset" : 33,
"type" : "word",
"position" : 5
},
{
"token" : "ago",
"start_offset" : 34,
"end_offset" : 37,
"type" : "word",
"position" : 6
}
]
}
トークナイザーとその説明のリストを以下の表に示します-
S.No | トークナイザーと説明 |
---|---|
1 |
Standard tokenizer (standard) これは文法ベースのトークナイザーに基づいて構築されており、max_token_lengthをこのトークナイザー用に構成できます。 |
2 |
Edge NGram tokenizer (edgeNGram) min_gram、max_gram、token_charsなどの設定をこのトークナイザーに設定できます。 |
3 |
Keyword tokenizer (keyword) これにより、入力全体が出力として生成され、buffer_sizeを設定できます。 |
4 |
Letter tokenizer (letter) これにより、文字以外が検出されるまで単語全体がキャプチャされます。 |