Elasticsearch-analysis
Elasticsearch-分析
検索操作中にクエリが処理されると、インデックスのコンテンツが分析モジュールによって分析されます。 このモジュールは、アナライザー、トークナイザー、トークンフィルター、および文字フィルターで構成されています。 アナライザーが定義されていない場合、デフォルトでは、組み込みのアナライザー、トークン、フィルター、およびトークナイザーが分析モジュールに登録されます。
次の例では、他のアナライザーが指定されていない場合に使用される標準アナライザーを使用します。 文法に基づいて文を分析し、文で使用される単語を生成します。
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 | Analyzer & Description |
---|---|
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 | Tokenizer & Description |
---|---|
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) これは、文字以外が見つかるまで単語全体をキャプチャします。 |