Skip to content
📖0 阅读·🤍0 点赞

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"  // 使用专属切菜机
    }
  }
}

记忆口诀

文字厨房三步骤:

  1. 洗菜去杂 → 字符过滤(HTML/符号清理)
  2. 精准切块 → 分词器(按语言规则切割)
  3. 调味精加工 → 词元过滤(转小写/去停用词/同义词)

常见切菜机类型:

  • 标准机 → 通用型,按空格标点切分
  • 简单机 → 只认字母,忽略数字标点
  • 中文机 → 理解语义,按词语切分
  • 自定义 → 按需组合,专属配方

选择原则:

🔤 英文内容 → 标准分词器
🇨🇳 中文内容 → IK分词器
🌐 多语言混合 → 自定义组合
🔍 特殊需求 → 定制专属配方

记住这个文字厨房的比喻,你就能轻松掌握Elasticsearch分词的精髓!👨🍳📚