【Elasticsearch】分词机制详解(含实战案例)

1.什么是分词 ?

分词Tokenization)是指将文本拆分成一个个独立的 词项token)的过程。在 Elasticsearch 中,分词是将原始文本分解为可被索引和搜索的基本单元的处理步骤。

例如:“Elasticsearch是一个强大的搜索引擎” → [“elasticsearch”, “”, “一个”, “强大”, “”, “搜索”, “引擎”]

2.为什么需要分词 ?

  • 提高搜索效率:将文本分解为词项可以建立倒排索引,快速定位文档。
  • 提升搜索准确性:通过分词可以匹配更精确的词项而非整个文本。
  • 支持语言特性:不同语言有不同的分词需求(如中文需要分词,英文按空格分)。
  • 实现高级搜索功能:如模糊搜索、同义词搜索等都依赖分词结果。

3.分词发生的阶段

分词主要发生在两个阶段:

  • 索引阶段Indexing Time):当文档被索引时,对文本字段内容进行分词处理。
  • 搜索阶段Search Time):对查询字符串进行分词处理(可使用与索引不同的分词器)。

4.分词器的组成

一个完整的分词器(Analyzer)由三部分组成:

  • 字符过滤器Character Filters):原始文本预处理
    • 如去除 HTML 标签、替换特殊字符等。
    • 一个分词器可有 0 个或多个字符过滤器。
  • 分词器Tokenizer):将文本拆分为词项
    • 必须且只有一个分词器。
    • 如标准分词器、中文分词器等。
  • 词项过滤器Token Filters):对词项进行进一步处理
    • 如小写转换、去除停用词、添加同义词等。
    • 一个分词器可有 0 个或多个词项过滤器。

5.分词器的分类

5.1 内置分词器

分词器名称
分词器用途
Standard Analyzer默认分词器,按词切分,小写处理
Simple Analyzer按非字母字符切分,小写处理
Whitespace Analyzer按空白字符切分,不转小写
Keyword Analyzer不分词,将整个输入作为一个词项
Pattern Analyzer使用正则表达式分词
Language Analyzers针对特定语言的分词器(如 englishfrench 等)

5.2 中文分词器(需要插件)

分词器名称
分词器用途
IK Analyzer支持中文细粒度和智能分词两种模式
Jieba Analyzer结巴中文分词
HanLP Analyzer功能丰富的中文分词器
THULAC清华大学中文分词器

5.3 自定义分词器

可以通过组合不同的字符过滤器、分词器和词项过滤器来创建自定义分词器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter": ["html_strip"],
          "tokenizer": "standard",
          "filter": ["lowercase", "stop"]
        }
      }
    }
  }
}

选择合适的分词器对搜索质量至关重要,需要根据实际业务需求和数据特点来选择或定制分词方案。

6.电商平台商品搜索 - 自定义分词器案例

6.1 场景需求

假设我们正在为一个跨境电商平台构建商品搜索系统,该平台主要销售电子产品,有以下特点:

  • 商品标题包含多种语言(英文、中文、品牌特有名词)
  • 商品型号规格复杂(如 “iPhone 15 Pro Max 256GB”)
  • 需要支持同义词搜索(如 “手机” 和 “智能手机” 应匹配相同结果)
  • 需要忽略特殊字符但保留重要符号(如 “Wi-Fi” 中的横线应保留)

6.2 自定义分词器设计

PUT /ecommerce_products
{
  "settings": {
    "analysis": {
      "char_filter": {
        "special_chars_filter": {
          "type": "mapping",
          "mappings": [
            "& => and",
            "® => ",
            "™ => ",
            "【 => [",
            "】 => ]"
          ]
        }
      },
      "filter": {
        "english_stop": {
          "type": "stop",
          "stopwords": "_english_"
        },
        "tech_synonyms": {
          "type": "synonym",
          "synonyms": [
            "手机, 智能手机, cellphone, mobile phone",
            "笔记本, 笔记本电脑, notebook, laptop",
            "平板, 平板电脑, tablet"
          ]
        },
        "product_type_filter": {
          "type": "word_delimiter",
          "preserve_original": true,
          "split_on_numerics": false,
          "split_on_case_change": false
        }
      },
      "analyzer": {
        "product_analyzer": {
          "type": "custom",
          "char_filter": [
            "html_strip",
            "special_chars_filter"
          ],
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "english_stop",
            "tech_synonyms",
            "product_type_filter",
            "asciifolding"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "product_analyzer",
        "search_analyzer": "product_analyzer"
      },
      "model_number": {
        "type": "keyword"
      }
    }
  }
}

在这里插入图片描述

6.3 分词器组件解析

  • 字符过滤器(Char Filters):
    • html_strip:去除 HTML 标签。
    • special_chars_filter:处理特殊字符和商标符号。
  • 分词器(Tokenizer):
    • 使用 standard 分词器作为基础。
  • 词项过滤器(Token Filters):
    • lowercase:转为小写。
    • english_stop:去除英文停用词。
    • tech_synonyms:添加电子产品同义词。
    • product_type_filter:特殊处理产品型号(保留原始形式)。
    • asciifolding:将非 ASCII 字符转换。

6.4 实际效果示例

  • 输入文本:“Apple iPhone® 15 Pro Max 256GB【旗舰手机】支持Wi-Fi 6E
  • 分词结果:[“apple”, “iphone”, “15”, “pro”, “max”, “256gb”, “旗舰”, “手机”, “智能手机”, “cellphone”, “mobile phone”, “wi-fi”, “6e”]

6.5 搜索场景优势

  • 多语言支持
    • 搜索 “手机” 也能找到标题含 “智能手机” 或 “cellphone” 的商品。
  • 型号规格处理
    • 搜索 “iphone 15 pro” 能匹配完整型号 “iPhone 15 Pro Max 256GB”。
    • 但不会错误拆分 “256GB” 为 “256” 和 “gb”。
  • 特殊符号处理
    • wi-fi” 和 “wifi” 会被视为等价搜索词。
    • 但保留重要连接符确保技术术语准确性。
  • 品牌保护
    • 商标符号 ® 被去除,但品牌名称保留。

6.6 实际应用

索引文档

POST /ecommerce_products/_doc/1
{
  "title": "Apple iPhone® 15 Pro Max 256GB【旗舰手机】支持Wi-Fi 6E",
  "model_number": "IPH15PM256"
}

在这里插入图片描述

搜索示例 1:同义词搜索

GET /ecommerce_products/_search
{
  "query": {
    "match": {
      "title": "智能手机"
    }
  }
}

能匹配到包含 “手机” 或 “cellphone” 的文档。

在这里插入图片描述

搜索示例 2:型号搜索

GET /ecommerce_products/_search
{
  "query": {
    "match": {
      "title": "iphone 15 pro"
    }
  }
}

能匹配完整型号 “iPhone 15 Pro Max 256GB”。

在这里插入图片描述

这个自定义分词器设计有效解决了电商产品搜索中的多语言处理、同义词扩展、特殊符号处理等典型问题,显著提升了搜索准确性和用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值