ES中分词器故事版
分词器(Text Analysis),也称为词法分析器(Lexical Analyzer),是一种将文本(通常是自然语言文本)分解成一系列单独的词汇单元(Token)的程序。
在自然语言处理中,分词器通常用于将文本分解成单独的词汇单元,这些单元将作为后续处理步骤的输入。这些词汇单元可以是单词、短语或句子等文本元素,这取决于分词器的具体实现和应用场景。例如,在搜索引擎中,分词器将文本查询分解成关键词,以便于搜索引擎匹配相关文档。
分词器通常基于特定的规则或算法进行操作。这些规则或算法可能基于词汇表、语法规则或机器学习技术等。在一些分词器中,还可能涉及词干提取、停用词过滤、拼写纠正、同义词处理等操作,以提高分词的准确性和效果。
分词器:数字村的「智能文字切菜机」🔪📝
想象数字村有个神奇的文字厨房,专门处理各种语言食材(文本)。分词器就是厨房里的智能切菜机,负责把大块文本食材切成标准化的词语颗粒,方便后续烹饪(搜索)!
故事:文字厨房的工作流程
1. 原始食材入库(原始文本)
text
"我爱吃北京烤鸭和上海小笼包" // 一整块生肉
2. 三步加工流程
第一步:洗菜去杂质(字符过滤器 Character Filter)
text
输入:<b>我爱吃</b>北京烤鸭&上海小笼包
↓ 去除HTML标签、特殊符号
输出:我爱吃北京烤鸭和上海小笼包
第二步:精准切块(分词器 Tokenizer)
text
输入:我爱吃北京烤鸭和上海小笼包
↓ 按语义切分
输出:["我", "爱", "吃", "北京", "烤鸭", "和", "上海", "小笼包"]
第三步:调味处理(词元过滤器 Token Filter)
text
输入:["我", "爱", "吃", "北京", "烤鸭", "和", "上海", "小笼包"]
↓ 去掉无意义词("我","爱","和") + 转小写
输出:["吃", "北京", "烤鸭", "上海", "小笼包"]
不同类型的切菜机(分词器对比)
1. 标准切菜机(Standard Analyzer)
json
"analyzer": "standard"
工作方式:
- 🔪 按空格和标点切分
- 🔄 英文转小写
- 🇨🇳 中文单字切分(不理想)
示例:
text
"Hello World! 你好世界"
→ ["hello", "world", "你", "好", "世", "界"]
2. 简单切菜机(Simple Analyzer)
json
"analyzer": "simple"
特点:
- 🔪 只按非字母字符切分
- 🔄 英文转小写
- 🚫 忽略数字和标点
示例:
text
"Hello-World 2023! 你好"
→ ["hello", "world", "你", "好"]
3. 中文智能切菜机(IK Analyzer)
json
"analyzer": "ik_max_word"
特点:
- 🧠 理解中文语义
- 🔪 按词语而非单字切分
- 📊 支持扩展词典
示例:
text
"我爱北京天安门"
→ ["我", "爱", "北京", "天安门"] // 智能分词!
为什么需要分词器?
搜索匹配的困境
搜索词 | 无分词器 | 有分词器 |
---|---|---|
"苹果手机" | 只能精确匹配 | 可搜"苹果"或"手机" |
"running" | 找不到"run" | 词干提取匹配"run" |
"上海浦东" | 必须完整输入 | 可搜"上海"或"浦东" |
实际应用场景
json
// 电商搜索配置
PUT products
{
"mappings": {
"properties": {
"product_name": {
"type": "text",
"analyzer": "ik_max_word" // 中文智能分词
}
}
}
}
// 用户搜索"华为手机充电器"
// 实际匹配:华为/手机/充电器 任意组合
分词器的核心价值
1. 提升搜索召回率
text
原始文本:"这款智能手机支持5G网络"
分词结果:["这款", "智能", "手机", "支持", "5g", "网络"]
搜索"5G手机" → 匹配"5g"和"手机" ✅
搜索"智能机" → 可能通过同义词匹配 ✅
2. 改善搜索精准度
text
停用词过滤前:["我","想","买","一部","手机"]
停用词过滤后:["买","手机"]
搜索"买手机" → 更精准匹配商品购买意图 ✅
3. 支持多语言混合
json
// 多语言混合文本
"iPhone14 Pro Max 性价比很高"
// 混合分词结果
["iphone14", "pro", "max", "性", "价", "比", "很", "高"]
自定义分词器配方
打造专属文字厨房
json
PUT my_kitchen
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": { // 自定义切菜机
"type": "custom",
"char_filter": ["html_strip"], // 洗菜:去HTML
"tokenizer": "ik_max_word", // 切菜:中文分词
"filter": [ // 调味:多道工序
"lowercase", // 转小写
"stop", // 去停用词
"synonym" // 同义词扩展
]
}
}
}
}
}
应用自定义分词器
json
PUT my_kitchen/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "my_custom_analyzer" // 使用专属切菜机
}
}
}
记忆口诀
文字厨房三步骤:
- 洗菜去杂 → 字符过滤(HTML/符号清理)
- 精准切块 → 分词器(按语言规则切割)
- 调味精加工 → 词元过滤(转小写/去停用词/同义词)
常见切菜机类型:
- 标准机 → 通用型,按空格标点切分
- 简单机 → 只认字母,忽略数字标点
- 中文机 → 理解语义,按词语切分
- 自定义 → 按需组合,专属配方
选择原则:
🔤 英文内容 → 标准分词器
🇨🇳 中文内容 → IK分词器
🌐 多语言混合 → 自定义组合
🔍 特殊需求 → 定制专属配方
记住这个文字厨房的比喻,你就能轻松掌握Elasticsearch分词的精髓!👨🍳📚