我在 elasticsearch 中有一個帶有標記器的欄位分析器的映射:
"tokenizer": {
"3gram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
現在我正在嘗試在 Elasticsearch 中使用 query = "acinash" 搜索 name = "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 版中,我得到了想要的結果(因為模糊),即通過查詢“acinash”得到了“avinash”,但在 ES 7.1 版中我沒有得到結果。
在 6.8 中嘗試使用“avinaah”搜索“avinash”時也是如此,我得到了結果,但在 7.1 中我沒有得到結果
ES 的作用是將其轉換為標記:[aci, cin, ina, nas, ash] 理想情況下應該與 ES 中的標記倒排索引匹配,標記為:[avi, vin, ina, nas, ash]。
但是為什么它在 7.1 中不匹配?
uj5u.com熱心網友回復:
它與 ES 版本無關。
將 max_expansions 更新為 50 以上。
max_expansions : Maximum number of variations created.
使用 3 克字母和數字作為 token_chars,理想的 max_expansion 將是 (26 個字母 10 個數字) * 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377953.html
