Es之mapping

1)、字段类型 

Es之mapping_第1张图片

Es之mapping_第2张图片 

 

 2)、映射

Mapping(映射)

Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和 索引的。比如,使用 mapping 来定义:

 哪些字符串属性应该被看做全文本属性(full text fields)。

 哪些属性包含数字,日期或者地理位置。

 文档中的所有属性是否都能被索引(_all 配置)。

 日期的格式。

 自定义映射规则来执行动态添加属性。

使用动态映射显式映射来定义数据。每种方法 根据您在数据之旅中所处的阶段提供不同的优势。为 例如,显式映射不想使用默认值的字段,或者 获得对创建哪些字段的更大控制。然后您可以允许Elasticsearch 动态添加其他字段。

 查看 mapping 信息

GET bank/_mapping

自动猜测的映射类型 

Es之mapping_第3张图片

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 的正确映射。然后使用如下方式进行数据迁移

Es之mapping_第4张图片 

 

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" : [ ]
}

你可能感兴趣的:(ElasticSearch,spring,java,后端,elasticsearch,云原生)