トークナイザーを持つフィールドアナライザでElasticsearchでマッピングがあります。
"tokenizer": {
"3gram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
_
現在、Query = "Acinash"を使用してElasticsearchの名前= "Avinash"を検索しようとしています
Esクエリが作成された場合:
{
"size": 5,
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "acinash",
"fields": [
"name"
],
"type": "best_fields",
"operator": "AND",
"slop": 0,
"fuzziness": "1",
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": false,
"fuzzy_transpositions": false,
"boost": 1.0
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}
_
しかし、ESバージョン6.8では、(あいまいさのせいで)希望の結果を得ています(あふれる)。
6.8で「Avinah」を使用して「Avinash」を検索しようとしたとき、7.1では結果が得られていません。
ESはそれをトークンに変換するのです。[ACI、CIN、INA、NAS、ASH]は、TokensのTokenSinated逆インデックスと最適なトークンの逆インデックスと一致する必要があります。[AVI、VIN、INA、NAS、ASH]。
しかし、なぜ7.1で一致していないのですか?
それはESバージョンとは関係ありません。
MAX_EXPANSIONSを50以上に更新します。
max_expansions : Maximum number of variations created.
_
TOKEN_CHARSとして3グラムの文字及び数字を使用すると、理想的なMAX_EXPANSIONが(26アルファベット+ 10桁)* 3