Elasticsearch Mapping设计与电商应用实战指南(新手指南)
本文将以电商场景的订单/商品搜索为例,带你系统掌握ES核心概念。即使零基础也能通过本文理解复杂mapping配置背后的设计思想。(全文约2500字,建议收藏精读)
一、ES文件结构全景解析
1.1 索引层级结构
bash
代码解读
复制代码
PUT product # 创建名为product的索引(相当于数据库) { "mappings": { # 定义索引结构(相当于表结构) "properties": { # 字段定义区(相当于列定义) "spuName": { # 字段名 "type": "text", # 字段类型 "analyzer": "ik_max_word" # 分词器配置 } } } }
1.2 核心配置区域
- type:决定数据存储方式(如text/keyword/long)
- index:控制是否创建索引(默认true)
- doc_values:控制列式存储(默认true)
- fields:实现多字段类型(如同时支持text和keyword)
二、电商场景关键技术拆解
2.1 嵌套对象实战(Nested Type)
问题场景:订单中的商品列表需要独立查询
json
代码解读
复制代码
"orderItems": { "type": "nested", // 关键配置 "properties": { "spuName": {"type": "text"} } }
对比实验:
- 普通object类型:
"spuName:手机"
会错误匹配到多个商品 - nested类型:精确匹配单个子文档
查询示例:
json
代码解读
复制代码
{ "query": { "nested": { "path": "orderItems", "query": { "term": {"orderItems.spuName": "旗舰手机"} } } } }
2.2 中文分词深度配置
IK分词器对比:
text
代码解读
复制代码
原始文本:"进口有机纯牛奶" ik_max_word ➔ 进口/有机/纯牛奶/牛奶(最大粒度切分) ik_smart ➔ 进口/有机/纯牛奶(智能切分)
典型配置:
json
代码解读
复制代码
"shopName": { "type": "text", "analyzer": "ik_max_word", // 索引时细粒度分词 "search_analyzer": "ik_smart" // 搜索时粗粒度匹配 }
效果验证:
bash
代码解读
复制