ElasticSearch——文档映射
1 动态映射
在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映射(即关系型数据库的表、字段等),在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。
动态映射规则如下:

1.1 删除原创建的索引
DELETE /es_db
1.2 创建索引
PUT /es_db
1.3 创建文档(ES根据数据类型, 会自动创建映射)
PUT /es_db/_doc/1 { "name": "Jack", "sex": 1, "age": 25, "book": "java入门至精通", "address": "广州小蛮腰" }
1.4 获取文档映射
GET /es_db/_mapping
2 静态映射
静态映射是在Elasticsearch中也可以事先定义好映射,包含文档的各字段类型、分词器等,这种方式称之为静态映射。
2.1 删除原创建的索引
DELETE /es_db
2.2 创建索引
PUT /es_db
2.3 设置文档映射
PUT /es_db { "mappings":{ "properties":{ "name":{"type":"keyword","index":true,"store":true}, "sex":{"type":"integer","index":true,"store":true}, "age":{"type":"integer","index":true,"store":true}, "book":{"type":"text","index":true,"store":true}, "address":{"type":"text","index":true,"store":true} } } }
2.4 根据静态映射创建文档
1 2 3 4 5 6 7 8 | PUT /es_db/_doc/1 { "name" : "Jack" , "sex" : 1, "age" : 25, "book" : "elasticSearch入门至精通" , "address" : "广州车陂" } |
2.5 获取文档映射
GET /es_db/_mapping
注意:es文档核心数据类型如下。
字符串:string,string类型包含 text 和 keyword。
text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引;允许es来检索这些词,text类型不能用来排序和聚合。
keyword:该类型不能分词,可以被用来检索过滤、排序和聚合,keyword类型不可用text进行分词模糊检索。
数值型:long、integer、short、byte、double、float
日期型:date
布尔型:boolean
2.6 keyword 与 text 映射类型的区别
将 book 字段设置为 keyword 映射 (只能精准查询, 不能分词查询,能聚合、排序)。
将 book 字段设置为 text 映射能模糊查询, 能分词查询,不能聚合、排序)。
1 2 3 4 5 6 7 8 | POST /es_db/_doc/_search { "query" : { "term" : { "book" : "elasticSearch入门至精通" } } } |
2.7 创建静态映射时指定text类型的ik分词器
2.7.1 设置ik分词器的文档映射
先删除之前的es_db再创建新的es_db定义ik_smart的映射。
1 2 3 4 5 6 7 8 9 10 11 12 | PUT /es_db { "mappings" :{ "properties" :{ "name" :{ "type" : "keyword" , "index" : true , "store" : true }, "sex" :{ "type" : "integer" , "index" : true , "store" : true }, "age" :{ "type" : "integer" , "index" : true , "store" : true }, "book" :{ "type" : "text" , "index" : true , "store" : true , "analyzer" : "ik_smart" , "search_analyzer" : "ik_smart" }, "address" :{ "type" : "text" , "index" : true , "store" : true } } } } |
2.7.2 分词查询
POST /es_db/_doc/_search { "query": { "match": {"address": "广"} } } POST /es_db/_doc/_search { "query": { "match": {"address": "广州"} } }
2.8 对已存在的mapping映射进行修改
具体方法
1)如果要推倒现有的映射, 你得重新建立一个静态索引
2)然后把之前索引里的数据导入到新的索引里
3)删除原创建的索引
4)为新索引起个别名, 为原索引名
POST _reindex { "source": { "index": "db_index" }, "dest": { "index": "db_index_2" } } DELETE /db_index PUT /db_index_2/_alias/db_index
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?