Elasticsearch 中的模糊匹配在两个不同的版本中给出了不同的结果
Fuzzy Matching in Elasticsearch gives different results in two different versions
我在 elasticsearch 中使用带有分词器的字段分析器进行映射:
"tokenizer": {
"3gram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
现在我正在尝试在 Elasticsearch 中使用查询 =“acinash”搜索名称 =“avinash”
形成的查询是:
{
"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 中不匹配?
与ES版本无关
更新max_expansions到50多个
max_expansions : Maximum number of variations created.
以 3 克字母和数字作为 token_chars,理想的 max_expansion 将是(26 个字母 + 10 个数字)* 3
我在 elasticsearch 中使用带有分词器的字段分析器进行映射:
"tokenizer": {
"3gram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
现在我正在尝试在 Elasticsearch 中使用查询 =“acinash”搜索名称 =“avinash”
形成的查询是:
{
"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 中不匹配?
与ES版本无关
更新max_expansions到50多个
max_expansions : Maximum number of variations created.
以 3 克字母和数字作为 token_chars,理想的 max_expansion 将是(26 个字母 + 10 个数字)* 3