Es之mapping

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Es之mapping

1)、字段类型

4c7855139fd741daaada52ded2473f6f.png

7b229ccab66f4a9dbaa929e72e72966f.png

8f61f5e3c1e04970a7e0af6365a6647f.png


2)、映射


Mapping(映射)

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


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


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


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


 日期的格式。


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


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


查看 mapping 信息

GET bank/_mapping

自动猜测的映射类型


6adac56c2e3a4583ac90e3d06723a378.png

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

image.png


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体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
No module factory available for dependency type: ModuleHotAcceptDependency
No module factory available for dependency type: ModuleHotAcceptDependency
330 0
|
5月前
|
Java 数据库
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension.
Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension.
|
6月前
Angular启动/node_modules/@types/node/index.d.ts (20,1): Invalid ‘reference‘ directive syntax.
Angular启动/node_modules/@types/node/index.d.ts (20,1): Invalid ‘reference‘ directive syntax.
78 2
|
11月前
【Error】This dependency was not found: * core-js/modules/es.error.cause.js in ./node_modules/@babel
【Error】This dependency was not found: * core-js/modules/es.error.cause.js in ./node_modules/@babel
es6 filter方法的使用
es6 filter方法的使用
105 0
|
人工智能 Java 应用服务中间件
SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
284 0
|
JavaScript
UniApp 解决 Error: Cannot find module ‘webpack/lib/RuleSet‘
UniApp 解决 Error: Cannot find module ‘webpack/lib/RuleSet‘
972 0
|
资源调度 开发工具 git
Cannot find module 'webpack'
Cannot find module 'webpack'
|
索引
ES修改mapping中的字段名称
ES修改mapping中的字段名称
906 0