【Elasticsearch】分词机制详解(含实战案例)_elasticsearch 分词
《Elasticsearch 进阶》系列,共包含以下文章:
- 分词机制详解(含实战案例)
- 数据预处理(含实战案例)
- 脚本(Script)
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
分词机制详解(含实战案例)
- 1.什么是分词 ?
- 2.为什么需要分词 ?
- 3.分词发生的阶段
- 4.分词器的组成
- 5.分词器的分类
- 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
english
、french
等)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
”。
这个自定义分词器设计有效解决了电商产品搜索中的多语言处理、同义词扩展、特殊符号处理等典型问题,显著提升了搜索准确性和用户体验。