1)、字段类型
2)、映射
Mapping(映射)
Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和 索引的。比如,使用 mapping 来定义:
哪些字符串属性应该被看做全文本属性(full text fields)。
哪些属性包含数字,日期或者地理位置。
文档中的所有属性是否都能被索引(_all 配置)。
日期的格式。
自定义映射规则来执行动态添加属性。
使用动态映射和显式映射来定义数据。每种方法 根据您在数据之旅中所处的阶段提供不同的优势。为 例如,显式映射不想使用默认值的字段,或者 获得对创建哪些字段的更大控制。然后您可以允许Elasticsearch 动态添加其他字段。
查看 mapping 信息
GET bank/_mapping
自动猜测的映射类型
3)、新版本改变
Es7 及以上移除了 type 的概念。
关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用, 但 ES 中不是这样的。elasticsearch 是基于 Lucene 开发的搜索引擎,而 ES 中不同 type下名称相同的 filed 最终在 Lucene 中的处理方式是一样的。
两个不同 type 下的两个 user_name,在 ES 同一个索引下其实被认为是同一个 filed, 你必须在两个不同的 type 中定义相同的 filed 映射。否则,不同 type 中的相同字段 名称就会在处理中出现冲突的情况,导致 Lucene 处理效率下降。
去掉 type 就是为了提高 ES 处理数据的效率。
Elasticsearch 7.x
URL 中的 type 参数为可选。比如,索引一个文档不再要求提供文档类型。
Elasticsearch 8.x
不再支持 URL 中的 type 参数。 解决:
1)、将索引从多类型迁移到单类型,每种类型文档一个独立索引
2)、将已存在的索引下的类型数据,全部迁移到指定位置即可。详见数据迁移
1、创建映射
PUT /my_index { "mappings": { "properties": { "age":{"type": "text"}, "email":{"type": "keyword"}, "name":{"type": "text"} } } }
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "my_index" }
2、添加新的字段映射
PUT /my-index/_mapping { "properties": { "employee-id": { "type": "keyword", "index": false } } }
{ "acknowledged" : true }
3、更新映射
对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移
所以以下操作会报错!
PUT /my_index { "mappings": { "properties": { "age":{"type": "text"}, "email":{"type": "keyword"}, "name":{"type": "text"}, "employee_id":{"type": "long"} } } }
{ "error": { "root_cause": [ { "type": "resource_already_exists_exception", "reason": "index [my_index/mLCXjYGEQyWwh5uexTlQ4w] already exists", "index_uuid": "mLCXjYGEQyWwh5uexTlQ4w", "index": "my_index" } ], "type": "resource_already_exists_exception", "reason": "index [my_index/mLCXjYGEQyWwh5uexTlQ4w] already exists", "index_uuid": "mLCXjYGEQyWwh5uexTlQ4w", "index": "my_index" }, "status": 400 }
4、数据迁移
先创建出 new_twitter 的正确映射。然后使用如下方式进行数据迁移
POST _reindex { "source": { "index": "bank", "type": "account" }, "dest": { "index": "newbank" } }
{ "took" : 2420, "timed_out" : false, "total" : 1000, "updated" : 0, "created" : 1000, "deleted" : 0, "batches" : 1, "version_conflicts" : 0, "noops" : 0, "retries" : { "bulk" : 0, "search" : 0 }, "throttled_millis" : 0, "requests_per_second" : -1.0, "throttled_until_millis" : 0, "failures" : [ ] }