Elasticsearch 核心:内置分析器全解析 + 特点对比 + 实战选型
Elasticsearch 核心:内置分析器全解析 + 特点对比 + 实战选型
- 一、前言
- 二、基础概念:分析器作用与执行流程
- 2.1 分析器核心作用
- 2.2 分析器标准执行流程图
- 三、Elasticsearch 6 大核心内置分析器
- 3.1 分析器1:standard 标准分析器
- 3.1.1 基本信息
- 3.1.2 核心特点
- 3.1.3 分词示例
- 3.1.4 适用场景
- 3.2 分析器2:simple 简单分析器
- 3.2.1 基本信息
- 3.2.2 核心特点
- 3.2.3 分词示例
- 3.2.4 适用场景
- 3.3 分析器3:stop 停用词分析器
- 3.3.1 基本信息
- 3.3.2 核心特点
- 3.3.3 分词示例
- 3.3.4 适用场景
- 3.4 分析器4:whitespace 空格分析器
- 3.4.1 基本信息
- 3.4.2 核心特点
- 3.4.3 分词示例
- 3.4.4 适用场景
- 3.5 分析器5:keyword 关键字分析器
- 3.5.1 基本信息
- 3.5.2 核心特点
- 3.5.3 分词示例
- 3.5.4 适用场景
- 3.6 分析器6:pattern 正则分析器
- 3.6.1 基本信息
- 3.6.2 核心特点
- 3.6.3 分词示例
- 3.6.4 适用场景
- 四、6 大内置分析器对比表(生产选型必备)
- 五、内置分析器实战使用方法
- 5.1 方式1:字段直接指定内置分析器
- 5.2 方式2:测试分析器分词效果
- 六、关键注意事项(避坑指南)
- 6.1 内置分析器不支持中文语义分词
- 6.2 大小写敏感问题
- 6.3 精准匹配必须用 keyword
- 6.4 索引与查询分析器必须一致
- 七、生产环境最佳实践
- 八、总结
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
在 Elasticsearch 中,Analyzer(分析器)是全文检索的基石,负责将文本切分为词条,决定搜索精度、召回率与响应速度。ES 开箱即用提供了多种内置分析器,无需安装插件、无需自定义配置,直接就能使用。
很多新手不知道:默认用哪个分析器?英文、中文、数字、特殊字符分别适合什么分析器?本文将系统梳理 ES 全部内置分析器,详细说明每个分析器的原理、特点、适用场景、分词效果,搭配流程图、对比表、实战命令,让你一篇吃透 ES 内置分析器。
二、基础概念:分析器作用与执行流程
2.1 分析器核心作用
- 写入时:对
text类型字段分词,构建倒排索引 - 查询时:对搜索关键词分词,匹配索引数据
- 标准化文本:大小写转换、去符号、去停用词等
2.2 分析器标准执行流程图
ES 内置分析器均按照此流程执行,只是组件配置不同。
三、Elasticsearch 6 大核心内置分析器
ES 提供6 种官方内置分析器,覆盖绝大多数英文/基础文本场景。
3.1 分析器1:standard 标准分析器
3.1.1 基本信息
- 默认分析器:ES 全局默认使用
- 语言:英文最优,中文按单字拆分
- 组合组件:
- Tokenizer:Standard Tokenizer
- Token Filter:Lowercase + Stop(默认关闭)
3.1.2 核心特点
- 按空格、标点符号分词
- 自动转小写
- 支持多语言基础分词
- 无多余配置,开箱即用
3.1.3 分词示例
文本:Hello Elasticsearch 6.0
分词结果:[hello, elasticsearch, 6.0]
3.1.4 适用场景
英文文本、日志内容、单词检索、通用场景默认首选。
3.2 分析器2:simple 简单分析器
3.2.1 基本信息
- 极简规则:非字母自动分割
- 只保留字母,丢弃数字、符号
- 强制转小写
3.2.2 核心特点
- 非字母字符作为分隔符
- 仅保留字母,全部小写
- 无停用词过滤
- 性能极高
3.2.3 分词示例
文本:Hello ES-6.0 Test!
分词结果:[hello, es, test]
3.2.4 适用场景
纯英文检索、简单文本、过滤数字/符号场景。
3.3 分析器3:stop 停用词分析器
3.3.1 基本信息
- 在
simple基础上增加停用词过滤 - 自动过滤无意义词汇:
the/a/an/is/of等
3.3.2 核心特点
- 非字母分割
- 转小写
- 自动去停用词
- 减少索引体积,提升查询效率
3.3.3 分词示例
文本:The Hello of Elasticsearch
分词结果:[hello, elasticsearch]
3.3.4 适用场景
英文文章、长文本、需要精简索引的场景。
3.4 分析器4:whitespace 空格分析器
3.4.1 基本信息
- 仅按空格分词,不处理任何内容
- 不转小写、不去符号、不去停用词
3.4.2 核心特点
- 只按空格切分
- 保留大小写、数字、符号
- 无任何加工处理
3.4.3 分词示例
文本:Hello ES-6.0 Test
分词结果:[Hello, ES-6.0, Test]
3.4.4 适用场景
代码、命令行、特殊格式文本、大小写敏感场景。
3.5 分析器5:keyword 关键字分析器
3.5.1 基本信息
- 不分词:整段文本作为一个词条
- 相当于无分词、无处理
3.5.2 核心特点
- 输入=输出,不切词
- 不修改文本内容
- 精准匹配、聚合、排序专用
3.5.3 分词示例
文本:Hello World
分词结果:[Hello World]
3.5.4 适用场景
订单号、手机号、状态值、枚举、精准匹配字段。
3.6 分析器6:pattern 正则分析器
3.6.1 基本信息
- 按正则表达式分词
- 默认正则:
\W+(非字母、数字、下划线分割) - 支持自定义正则规则
3.6.2 核心特点
- 灵活分词,支持自定义分隔符
- 自动转小写
- 可过滤特殊符号
3.6.3 分词示例
文本:Hello ES_6.0 Test&Search
分词结果:[hello, es_6, 0, test, search]
3.6.4 适用场景
特殊格式文本、自定义分隔符、复杂文本分词。
四、6 大内置分析器对比表(生产选型必备)
| 分析器名称 | 分词规则 | 小写转换 | 停用词 | 保留数字 | 中文支持 | 适用场景 |
|---|---|---|---|---|---|---|
| standard | 标点/空格 | 是 | 否 | 是 | 单字 | 英文通用默认 |
| simple | 非字母分割 | 是 | 否 | 否 | 单字 | 纯英文简单文本 |
| stop | 非字母分割 | 是 | 是 | 否 | 单字 | 英文长文本去停用词 |
| whitespace | 仅空格 | 否 | 否 | 是 | 不支持 | 代码/大小写敏感 |
| keyword | 不分词 | 否 | 否 | 是 | 不支持 | 精准匹配/枚举 |
| pattern | 正则 | 是 | 否 | 部分 | 单字 | 自定义分隔符 |
五、内置分析器实战使用方法
5.1 方式1:字段直接指定内置分析器
PUT /test_index { "mappings": { "properties": { "title": { "type": "text", "analyzer": "standard" // 指定内置分析器 } } } }5.2 方式2:测试分析器分词效果
POST /_analyze { "analyzer": "standard", // 替换为任意内置分析器 "text": "Hello Elasticsearch 6.0" }六、关键注意事项(避坑指南)
6.1 内置分析器不支持中文语义分词
- 所有 ES 内置分析器均不支持中文分词
- 中文会被拆分为单个汉字,无法正常搜索
- 中文必须使用IK 分词插件
6.2 大小写敏感问题
whitespace保留大小写,搜索必须完全一致- 其他分析器自动小写,不区分大小写
6.3 精准匹配必须用 keyword
- 订单号、手机号、状态等必须使用 keyword 分析器
- 否则分词后无法精准查询
6.4 索引与查询分析器必须一致
- 写入和搜索使用不同分析器会导致搜不到数据
- 建议统一使用
standard或业务指定分析器
七、生产环境最佳实践
- 英文/通用场景:使用standard(默认)
- 纯英文简单文本:使用stop去停用词
- 代码/特殊文本:使用whitespace
- 精准匹配字段:使用keyword
- 自定义分隔符:使用pattern
- 中文业务:放弃内置分析器,使用IK 分词
八、总结
- Elasticsearch 提供6 大内置分析器,开箱即用,无需插件。
- standard是默认分析器,适合绝大多数英文/基础场景。
- keyword不分词,用于精准匹配、聚合、排序。
- whitespace仅按空格分词,保留原始格式。
- 所有内置分析器不支持中文语义分词,中文必须使用 IK 插件。
- 生产根据文本类型、语言、搜索需求选择对应分析器。
🌺The End🌺点点关注,收藏不迷路🌺 |
