👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路
文章大纲
1.2.2倒排索引原理与分词器(`Analyzer`) 1. `倒排索引:搜索引擎的基石` 1.1 正排索引 vs 倒排索引
1.2 倒排索引核心结构
1.3 性能优化策略
2. 分词器(`Analyzer`)工作机制 2.1 分词器三层处理流程 2.2 内置分词器对比
2.3 中文分词深度解决方案
3. 联合应用实战案例 3.1 电商搜索优化 3.2 日志多语言处理 3.3 敏感词过滤系统
4. 性能对比与最佳实践 4.1 `倒排索引配置建议` 4.2 分词器选择指南 4.3 联合优化最佳实践
1.2.2倒排索引原理与分词器(Analyzer
)
1. 倒排索引:搜索引擎的基石
1.1 正排索引 vs 倒排索引
索引类型 数据结构 典型查询场景 时间复杂度 正排索引 文档ID → 字段内容 已知ID查内容(SELECT *
) O(1) 倒排索引 词项 → [文档ID列表] 关键词搜索(WHERE text LIKE
) O(log n) + O(m)
示例数据对比:
文档ID 标题 1 Elasticsearch实战 2 搜索引擎核心技术
正排索引
倒排索引
1.2 倒排索引核心结构
倒排索引 = 词项字典(Term Dictionary
) + 倒排列表(Posting List
)
压缩效果对比(1亿文档场景
):
存储方式 原始大小 压缩后大小 查询速度 未压缩文档ID列表 400MB - 120ms Roaring Bitmaps
400MB 15MB 45ms
Roaring Bitmaps
:是一种用于高效存储和操作稀疏位图(bitmap)的数据结构,通过将一个大的位图分割成多个 16
位的桶(bucket
),每个桶对应一个 16
位的键值。
优势
节省空间 :对于稀疏位图,Roaring Bitmaps
比传统的位图存储方式节省大量的内存空间。高效操作 :支持快速的并集、交集、差集等操作,操作速度快。易于扩展 :可以方便地处理大规模的位图数据。 存储方式
数组存储 :当桶中元素较少时,使用一个短整型数组来存储这些元素。位图存储 :当桶中元素较多时,使用传统的位图(bitmap
)来存储。
1.3 性能优化策略
2. 分词器(Analyzer
)工作机制
2.1 分词器三层处理流程
示例:处理"Elasticsearch's
中文分词"
字符过滤器:去除HTML标签、替换缩写(如将’s
替换为空) → “Elasticsearch
中文分词”
分词器:按空格/标点切分 → [“Elasticsearch
”, “中文”, “分词”]
Token过滤器:转小写、移除停用词 → [“elasticsearch
”, “中文”, “分词”]
2.2 内置分词器对比
分词器类型 处理逻辑 中文支持
示例输入 → 输出 Standard 按Unicode文本分割,转小写 差 “Elasticsearch实战” → [“elasticsearch”, “实战”] Simple 非字母字符切分,保留大写 无 “Hello-World” → [“Hello”, “World”] Whitespace 按空格切分,保留原始大小写 无 “Hello World” → [“Hello”, “World”] IK
(中文增强)
智能语义切分
优秀
“搜索引擎” → [“搜索”, “引擎”, “搜索引擎”]
分词性能测试(处理10万条商品标题):
分词器 耗时(秒) 内存占用(GB) 准确率(F1值) Standard 4.2 1.8 0.62 IK 6.7 2.5 0.89 Jieba
5.9 2.1 0.91
2.3 中文分词深度解决方案
痛点分析 :
歧义切分
(如"南京市长江大桥" → 南京/市长/江大桥 或 南京市/长江/大桥)新词识别(如网络用语"奥利给") IK分词器实战配置 :
PUT / news
{
"settings" : {
"analysis" : {
"analyzer" : {
"ik_smart_custom" : {
"type" : "custom" ,
"tokenizer" : "ik_smart" ,
"filter" : [ "lowercase" , "stopwords_filter" ]
}
} ,
"filter" : {
"stopwords_filter" : {
"type" : "stop" ,
"stopwords" : [ "的" , "是" , "了" ]
}
}
}
}
}
3. 联合应用实战案例
3.1 电商搜索优化
需求 :提升"女士冬季羽绒服"搜索准确率解决方案 :
"filter" : {
"synonym_filter" : {
"type" : "synonym" ,
"synonyms" : [ "羽绒服 => 羽绒衣, 羽绒外套" ]
}
}
"mappings" : {
"properties" : {
"title" : {
"type" : "text" ,
"index_options" : "offsets"
}
}
}
效果 :搜索召回率提升37% 相关商品点击率(CTR
)从22%提升至41%
3.2 日志多语言处理
PUT / logs
{
"settings" : {
"analysis" : {
"analyzer" : {
"multi_lang" : {
"type" : "custom" ,
"char_filter" : [ "html_strip" ] ,
"tokenizer" : "standard" ,
"filter" : [
"lowercase" ,
"cjk_width"
]
}
}
}
}
}
处理效果 :
日文文本 “エラーメッセージ” → [“エラーメッセージ”] 中文文本 “错误信息” → [“错”, “误”, “信”, “息”]
3.3 敏感词过滤系统
实现方案 :
"char_filter" : {
"sensitive_filter" : {
"type" : "mapping" ,
"mappings" : [ "傻X => **" , "垃圾 => **" ]
}
}
"analyzer" : {
"safe_analyzer" : {
"char_filter" : [ "sensitive_filter" ] ,
"tokenizer" : "ik_smart"
}
}
测试结果 :原始文本:“这个产品简直是垃圾!” 处理后词项:[“这个”, “产品”, “简直”, “是”, “**”]
4. 性能对比与最佳实践
4.1 倒排索引配置建议
场景 推荐配置 预期收益 高频短语查询 启用index_options: positions
短语查询速度提升3倍 大文本存储 禁用_source
字段 + 开启best_compression
存储空间减少40% 实时性要求高 设置refresh_interval: 30s
写入吞吐量提升120%
4.2 分词器选择指南
场景 推荐分词器 关键特性 中文搜索 IK分词器
细粒度切分 + 新词识别
多语言混合 标准分词器 + 小写过滤 基础分词 + 统一规范化 代码/日志分析
白名单分词器
保留特殊符号(如HTTP_200
)
4.3 联合优化最佳实践
冷热数据分层
热数据:SSD存储 + 高副本数(保障查询性能)
冷数据:HDD存储 + 禁用副本(降低成本)
混合索引策略 PUT / products
{
"settings" : {
"index" : {
"number_of_shards" : 6 ,
"number_of_replicas" : 1 ,
"analysis" : { ... }
}
} ,
"mappings" : {
"dynamic_templates" : [
{
"strings_as_keywords" : {
"match_mapping_type" : "string" ,
"mapping" : { "type" : "keyword" }
}
}
]
}
}
监控与调优