当前位置: 首页 > news >正文

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

分词机制详解

  • 1.什么是分词 ?
  • 2.为什么需要分词 ?
  • 3.分词发生的阶段
  • 4.分词器的组成
  • 5.分词器的分类
    • 5.1 内置分词器
    • 5.2 中文分词器(需要插件)
    • 5.3 自定义分词器
  • 6.电商平台商品搜索 - 自定义分词器案例
    • 6.1 场景需求
    • 6.2 自定义分词器设计
    • 6.3 分词器组件解析
    • 6.4 实际效果示例
    • 6.5 搜索场景优势
    • 6.6 实际应用
      • 索引文档
      • 搜索示例 1:同义词搜索
      • 搜索示例 2:型号搜索

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”。

在这里插入图片描述

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

http://www.xdnf.cn/news/1031707.html

相关文章:

  • [学习] FIR多项滤波器的数学原理详解:从多相分解到高效实现(完整仿真代码)
  • 【FineDance】训练:accelerate config 的作用
  • tshark命令行语法详解
  • 量化面试绿皮书:13. 贴错标签的袋子
  • Python爬虫实战:研究simpleq相关技术
  • 同步与异步编程范式全景研究——从CPU时钟周期到云原生架构的范式演进
  • Windows平台进程加速方案研究:以网盘下载优化为例
  • 再参数化视角下的批量归一化:缩放平移操作的本质意义
  • ESP32-S3 学习之旅开篇:课程与芯片基础全解析
  • php 数学公式转成SVG,并下载到服务器本地
  • 查看哪些IP在向kafka的broker生产消息
  • 智能穿戴平台与医疗AI融合发展路径研究
  • 基于springboot+servlet、jsp的潮服购物商城系统的设计与实现,论文7000字
  • Linux免驱使用slcan,使用方法以Ubuntu为例
  • Zookeeper 3.8.4 安装部署帮助手册
  • 数据库管理员密码重置指南:MySQL, Oracle, PostgreSQL
  • 【Flutter】性能优化总结
  • Flutter 与原生技术(Objective-C/Swift,java)的关系
  • Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
  • 负载均衡器:Ribbon和LoadBalance
  • NY248NY254美光科技闪存NY258NY261
  • [架构之美]解决Windows 10主机与Windows 10虚拟机之间无法拖拽复制问题
  • 使用 Flutter 在 Windows 平台开发 Android 应用
  • MATLAB提供的两种画误差矩阵的函数
  • 矩阵混剪系统源码搭建全流程技术解析,矩阵OEM
  • 篇章七 论坛系统——业务开发——前端
  • 山东大学软件学院项目实训:基于大模型的模拟面试系统项目总结(十)
  • PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
  • Javaweb学习——day3(Servlet 中处理表单数据)
  • GO语言---匿名函数