跳到正文
Elaine Blog
返回

Mapping、Analysis 与数据管理

Elasticsearch 与搜索架构

Mapping 决定字段怎样存储和检索,Analysis 决定文本怎样变成词项。字段类型一旦与数据不匹配,后期通常要新建索引并重建数据,不能靠修改 Mapping 原地修复。

Table of contents

Open Table of contents

先区分 text 与 keyword

text 会经过分析器,适合全文检索;keyword 保留完整值,适合精确过滤、排序和聚合。商品标题常使用 multi-field,同时提供 title 文本字段与 title.keyword 精确字段。

数据推荐类型原因
商品标题text + keyword 子字段搜索并支持精确用途
分类编码keyword不应分词
价格分long范围、排序、无浮点误差
上架时间date时间范围与日期聚合
是否可售boolean精确状态过滤

不要默认把任意 JSON 动态写入。字段名无限增长会造成 mapping explosion(映射爆炸),消耗堆并拖慢集群状态更新。对稳定业务索引使用 dynamic: strict,对不检索的扩展对象可禁用索引或明确使用扁平类型。

分析器是一条流水线

分析器由字符过滤器、分词器和词元过滤器组成。索引时与查询时通常使用兼容规则,否则查询词项无法命中索引词项。

"Java, JAVA!" → 字符清理 → [Java, JAVA] → lowercase → [java, java]

_analyze API保存代表性输入和期望 token,把它当成回归测试。Elastic 的文本分析文档解释了完整处理链。

修改结构要重建

使用带版本的物理索引和稳定别名:创建 products-v2,写入新 Mapping,全量 Reindex,再追平增量;校验文档数、抽样结果和代表性查询后,原子切换 products-read/products-write 别名。观察期内保留旧索引,回退时切回别名。

下一步

继续阅读09-04 Query DSL 与 Filter Context,让查询意图与评分、过滤边界对齐。


分享这篇文章:

上一篇
Elasticsearch、Kibana、安全与索引生命周期
下一篇
Query DSL 与 Filter Context