Elasticsearch中tokens(分词单元)的具体作用是什么?
Elasticsearch Token 作用与查询逻辑说明
一、Token 的核心用途
你在 Elasticsearch 中写入 text 类型字段时,系统不会直接用原始文本做检索匹配,而是会先通过字段绑定的分析器(你这里配置的是自定义的 name_analyzer)对原始文本做分词、过滤处理,最终产出的就是你看到的这些 token。这些 token 会被写入倒排索引,作为 Elasticsearch 全文检索的核心匹配单元,所有全文检索逻辑都是基于 token 匹配,而非原始文本匹配。
二、不同查询类型的匹配规则
- 如果你用
match系列全文查询(包括match、match_phrase等):你输入的查询字符串会先使用该字段绑定的同一个分析器做分词处理,得到查询侧的 token,再去倒排索引中匹配是否存在对应的 token,匹配成功即命中文档。
举你当前场景的例子:你搜索André、andre、ANDRE都能命中该文档,因为查询词分词后会得到andre、andré两个 token,和倒排索引中已有的 token 完全匹配;搜索andre.mustermann、gmail.com也能正常命中。 - 如果你在
bool查询的must/should条件中使用term/terms这类精确查询:系统不会对查询输入做分词处理,会直接拿你输入的字符串和倒排索引中的 token 做精确匹配,比如你用term查询搜首字母大写的André就无法命中,因为你的索引中只存储了全小写的andre、andré两个 token。
三、你的当前配置效果说明
你设置的 asciifolding 过滤器开启 preserve_original=true 的配置符合模糊匹配+精准匹配的双重需求:既支持用户不带重音符号搜索(搜 andre 命中带重音的 André),也支持用户带重音符号搜索(搜 andré 也能命中),搭配 unique 过滤器还能自动去重重复 token,减少索引冗余。
内容的提问来源于stack exchange,提问作者Vencarii
相关产品推荐
相关产品推荐

