在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

query_string词距问题

Elasticsearch | 作者 caster_QL | 发布于2022年05月08日 | 阅读数:1613

求教敢于query_string词距 ~ 问题:
1.间隔term数量和term的前后顺序都算一个slop距离是么,有没有具体的算法?
2.如果分出来多个词的词距是如何计算的?如下图分出来三个词如何计算距离满足查询条件?
 
1.png
已邀请:

Charele - Cisco4321

赞同来自: caster_QL

试了下,拿"aaa bbb ccc"~1"来说
"aaa bbb ccc", 好
"aaa xxx bbb ccc", 好
"aaa bbb xxx ccc", 好
 
"aaa xxx bbb xxx ccc", 不好
slop变化了,情况又不同。
 
得到正确结果就行。没必要搞清楚,我搞不清。

pzw9696

赞同来自: caster_QL

1. term与term之间有个距离,看分完词之后的postion就知道了, 不过走slop最后变成PhraseQuery,计算时候是按照相对距离来处理的,至于算法就是编辑距离的计算。
2. 如你图所示,查询语句分完词之后"酸 橙味 碳酸饮料" 在PhraseQuery里会形成3个term,他们之间的相对距离默认是0。因为你加了~23,也就是slop为23,也就是目标文档分完词之后包含"酸"  "橙味"  "碳酸饮料" 切经过编辑距离计算能得到查询的酸 橙味 碳酸饮料,则目标文档则符合。
具体可以看看
SloppyPhraseMatcher#nextMatch的处理
 

bao

赞同来自:

您好,这个问题的结论有吗

要回复问题请先登录注册