Elasticsearch核心:Token Filter工作原理全解析+内置过滤器实战
Elasticsearch核心:Token Filter工作原理全解析+内置过滤器实战
- 一、前言
- 二、基础概念:什么是 Token Filter?
- 2.1 核心定义
- 2.2 分词整体流程(Token Filter 位置)
- 三、Token Filter 工作原理与执行流程
- 3.1 执行原理
- 3.2 标准执行流程(带序号)
- 四、Token Filter 核心特点
- 五、ES 内置常用 Token Filter(生产高频使用)
- 5.1 1. lowercase(小写转换)
- 5.2 2. stop(停用词过滤器)
- 5.3 3. synonym(同义词过滤器)
- 5.4 4. keyword_repeat(关键词重复)
- 5.5 5. ngram / edge_ngram
- 5.6 6. asciifolding
- 5.7 7. unique
- 5.8 8. pinyin(拼音过滤器,插件)
- 六、Token Filter 工作流程真实案例
- 案例文本
- 执行步骤
- 七、如何自定义 Token Filter?(实战配置)
- 7.1 配置位置
- 7.2 完整示例(小写 + 停用词 + 同义词)
- 八、测试 Token Filter 效果(必学命令)
- 九、Token Filter 高频使用场景
- 十、Token Filter 常见避坑指南
- 十一、总结
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
在 Elasticsearch 分词流程中,Token Filter(词条过滤器)是决定分词质量、搜索精准度、检索效果的关键组件。大小写转换、去停用词、同义词替换、拼音搜索、去重等核心功能,全都依赖 Token Filter 实现。
很多人不知道:为什么搜索“Apple”找不到“apple”?为什么搜索“电脑”能匹配“计算机”?这些都是 Token Filter 在背后起作用。
本文将从定义、工作流程、执行原理、内置过滤器、自定义配置全方位解析 Token Filter,搭配流程图、实战代码,让你彻底掌握其工作机制。
二、基础概念:什么是 Token Filter?
2.1 核心定义
- Token Filter(词条过滤器)是 Analyzer(分析器)的三大核心组件之一。
- 作用:对Tokenizer 分词后的词条(Token)进行二次加工、修改、过滤、增强。
- 特点:接收词条流 → 处理 → 输出新词条流,可以有 0 个或多个。
- 一句话总结:分词后的“精加工车间”。
2.2 分词整体流程(Token Filter 位置)
✅Token Filter 一定在分词器之后执行,专门处理已经切分好的词条。
三、Token Filter 工作原理与执行流程
3.1 执行原理
- Tokenizer 将文本切分成独立词条数组。
- 依次交给多个 Token Filter 按顺序处理。
- 每个过滤器可以:
- 删除词条(如停用词“的”)
- 修改词条(如转小写)
- 新增词条(如同义词)
- 保持不变
- 最终输出处理后的词条流。
3.2 标准执行流程(带序号)
- 原始文本:
Hello World 我的ES - 字符过滤:无变化
- 分词器切分:
[Hello, World, 我, 的, ES] - Token Filter 执行
- 小写过滤器 →
[hello, world, 我, 的, es] - 停用词过滤器 →
[hello, world, es]
- 小写过滤器 →
- 最终词条:
[hello, world, es]
四、Token Filter 核心特点
- 顺序执行:配置多个过滤器时,从上到下依次执行
- 无数量限制:可以配置 0~N 个
- 不改变原文:只改变分词结果
- 搜索/索引双阶段生效
- 中文搜索必备:停用词、同义词、拼音全靠它
五、ES 内置常用 Token Filter(生产高频使用)
5.1 1. lowercase(小写转换)
- 作用:所有英文字母转为小写
- 解决:搜索 Apple / apple 结果一致
- 示例:
Hello→hello
5.2 2. stop(停用词过滤器)
- 作用:删除无意义词(的、了、是、在、the、a、is)
- 作用:减少索引大小,提高搜索效率
- 示例:
我的电脑→[电脑]
5.3 3. synonym(同义词过滤器)
- 作用:自动扩展同义词
- 示例:
电脑→[电脑, 计算机, PC]
5.4 4. keyword_repeat(关键词重复)
- 作用:同时保留分词和不分词结果
5.5 5. ngram / edge_ngram
- 作用:自动前缀分词
- 场景:输入提示、自动补全
- 示例:
Elastic→[el, ela, elas, elast...]
5.6 6. asciifolding
- 作用:去除音标、特殊符号
- 示例:
café→cafe
5.7 7. unique
- 作用:词条去重
- 示例:
[ES,ES,搜索]→[ES,搜索]
5.8 8. pinyin(拼音过滤器,插件)
- 作用:将汉字转为拼音
- 场景:拼音搜索
- 示例:
elasticsearch→dian nao
六、Token Filter 工作流程真实案例
案例文本
我爱我的Elasticsearch
执行步骤
Tokenizer 分词
[我, 爱, 我, 的, Elasticsearch]Token Filter 1:stop(去停用词)
[爱, Elasticsearch]Token Filter 2:lowercase(小写)
[爱, elasticsearch]Token Filter 3:unique(去重)
[爱, elasticsearch]最终输出
[爱, elasticsearch]
七、如何自定义 Token Filter?(实战配置)
7.1 配置位置
在索引settings → analysis → filter中定义。
7.2 完整示例(小写 + 停用词 + 同义词)
PUT /test_index { "settings": { "analysis": { "filter": { // 1. 自定义停用词过滤器 "my_stop_filter": { "type": "stop", "stopwords": ["的", "了", "是", "在", "the"] }, // 2. 自定义同义词过滤器 "my_synonym_filter": { "type": "synonym", "synonyms": ["电脑,计算机,PC", "手机,移动电话"] } }, "analyzer": { "my_analyzer": { "tokenizer": "ik_max_word", "filter": [ "lowercase", // 小写 "my_stop_filter",// 停用词 "my_synonym_filter",// 同义词 "unique" // 去重 ] } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "my_analyzer" } } } }八、测试 Token Filter 效果(必学命令)
POST /test_index/_analyze { "analyzer": "my_analyzer", "text": "我喜欢用电脑学习Elasticsearch" }返回结果会展示:
- 小写转换
- 停用词删除
- 同义词扩展
- 去重效果
九、Token Filter 高频使用场景
- 英文搜索:必须加 lowercase
- 中文搜索:必须加 停用词过滤器
- 电商搜索:必须加 同义词过滤器
- 输入提示:必须加 edge_ngram
- 拼音搜索:必须加 pinyin 过滤器
- 去重优化:必须加 unique
十、Token Filter 常见避坑指南
- 过滤器顺序错误→ 分词异常
- 停用词过滤过度→ 搜索不到精准内容
- 同义词配置错误→ 结果混乱
- 索引与查询使用不同过滤器→ 搜不到数据
- text 字段忘记加过滤器→ 中英文大小写不匹配
十一、总结
- Token Filter:Analyzer 的后置加工组件,专门处理分词后的词条。
- 执行位置:Tokenizer 分词之后。
- 核心能力:增、删、改、重写字条。
- 工作流程:接收词条 → 顺序过滤 → 输出最终词条。
- 必备过滤器:lowercase、stop、synonym、ngram、pinyin。
- 作用:决定搜索是否精准、是否智能、是否高效。
🌺The End🌺点点关注,收藏不迷路🌺 |
