web-dev-qa-db-ja.com

Elasticsearchのファジィマッチングは、2つの異なるバージョンで異なる結果を与えます

トークナイザーを持つフィールドアナライザで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で一致していないのですか?

3
Akash Gupta

それはESバージョンとは関係ありません。

MAX_EXPANSIONSを50以上に更新します。

max_expansions : Maximum number of variations created. _

TOKEN_CHARSとして3グラムの文字及び数字を使用すると、理想的なMAX_EXPANSIONが(26アルファベット+ 10桁)* 3

0
Deepesh Dagar