映射是定义文档及其包含的字段的存储和索引方式的过程。

映射定义具有:

  • 元字段

    元字段用于自定义如何处理关联的文档元数据。包括文档 _index,_id和 _source领域。
  • 字段或属性

    映射包含properties与文档相关的字段列表。

字段数据类型

每个字段都有一个数据type,可以是:

  • 简单类型等text,keyword,date,long, double,boolean或ip。
  • 支持JSON的层次结构性质的类型,如 object或nested。
  • 或一种特殊类型的像geo_point, geo_shape或completion。

为不同的目的以不同的方式为同一字段建立索引通常很有用。例如,一个string字段可以被索引为text全文搜索的字段,也可以被索引keyword为排序或聚合的字段。或者,您可以使用standard分析器, english分析器和 french分析器为字符串字段建立索引。

防止映射爆炸的设置

在索引中定义太多字段的情况可能导致映射爆炸,从而可能导致内存不足错误和难以恢复的情况。此问题可能比预期的更常见。例如,考虑一种情况,其中插入的每个新文档都引入了新字段。这在动态映射中很常见。每次文档包含新字段时,这些字段最终都会出现在索引的映射中。对于少量数据,这并不担心,但是随着映射的增长,它可能会成为问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止不良文档导致映射爆炸:

index.mapping.total_fields.limit:索引中的最大字段数。字段和对象的映射以及字段别名都计入此限制。默认值为1000。

该限制已到位,以防止映射和搜索变得太大。较高的值可能导致性能下降和内存问题,尤其是在负载较高或资源很少的群集中。

如果增加此设置,建议您也增加该 indices.query.bool.max_clause_count设置,这将限制查询中布尔子句的最大数量。

index.mapping.depth.limit:字段的最大深度,以内部对象的数量衡量。例如,如果所有字段都在根对象级别定义,则深度为1。如果存在一个对象映射,则深度为 2,等等。默认值为20。

index.mapping.nested_fields.limit:nested索引中 最大不同映射的数量,默认为50。

index.mapping.nested_objects.limit:nested单个文档中所有嵌套类型 中JSON对象的最大数量,默认为10000。

index.mapping.field_name_length.limit:设置字段名称的最大长度。默认值为Long.MAX_VALUE(无限制)。此设置实际上不能解决映射爆炸问题,但是如果您想限制字段长度,该设置可能仍然有用。通常不需要设置此设置。除非用户开始添加大量名称很长的字段,否则默认设置是可以的。

动态映射

字段和映射类型在使用之前不需要定义。通过动态映射,仅通过索引文档即可自动添加新的字段名称。可以将新字段添加到顶级映射类型以及内部object 和nested字段中。

可以将动态映射规则配置为自定义用于新字段的映射。

显式映射

您对数据的了解超出了Elasticsearch的猜测,因此尽管动态映射对于入门非常有用,但有时您仍需要指定自己的显式映射。

当你可以创建字段映射创建索引和 字段添加到现有的索引。

使用显式映射创建索引

您可以使用create index API创建带有显式映射的新索引。

  1. PUT /my-index
  2. {
  3. "mappings": {
  4. "properties": {
  5. "age": {
  6. "type": "integer"
  7. },
  8. "email": {
  9. "type": "keyword"
  10. },
  11. "name": {
  12. "type": "text"
  13. }
  14. }
  15. }
  16. }

将字段添加到现有映射

您可以使用放置映射 API将一个或多个新字段添加到现有索引。

以下示例添加employee-id了keyword一个index映射参数值为的字段 false。这意味着该employee-id字段的值已存储,但未索引或不可搜索。

  1. PUT /my-index/_mapping
  2. {
  3. "properties": {
  4. "employee-id": {
  5. "type": "keyword",
  6. "index": false
  7. }
  8. }
  9. }

更新字段的映射

除了支持的映射参数外,您无法更改现有字段的映射或字段类型。更改现有字段可能会使已经建立索引的数据无效。

如果您需要更改字段映射,创建具有正确映射一个新的索引和重新索引的数据转换成指数。

重命名字段会使在旧字段名称下已建立索引的数据无效。而是添加一个alias字段以创建备用字段名称。

查看索引的映射

您可以使用get mapping API查看现有索引的映射。

  1. GET my-index/_mapping

API返回以下响应:

  1. {
  2. "my-index" : {
  3. "mappings" : {
  4. "properties" : {
  5. "age" : {
  6. "type" : "integer"
  7. },
  8. "email" : {
  9. "type" : "keyword"
  10. },
  11. "employee-id" : {
  12. "type" : "keyword",
  13. "index" : false
  14. },
  15. "name" : {
  16. "type" : "text"
  17. }
  18. }
  19. }
  20. }
  21. }

查看特定字段的映射

如果您只想查看一个或多个特定字段的映射,则可以使用get字段映射 API。

如果您不需要索引的完整映射或索引包含大量字段,这将很有用。

以下请求检索该employee-id字段的映射。

  1. GET /my-index/_mapping/field/employee-id

API返回以下响应:

  1. {
  2. "my-index" : {
  3. "mappings" : {
  4. "employee-id" : {
  5. "full_name" : "employee-id",
  6. "mapping" : {
  7. "employee-id" : {
  8. "type" : "keyword",
  9. "index" : false
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }

Elasticsearch的mapping讲解的更多相关文章

  1. elasticsearch 之mapping

    搭好elk 后,有时候会发现kibana 统计数据时,数据类型不对,这个时候就和elasticsearch的mapping有关,虽然我们可以用logstash修改传入es里的数据类型,比如 float ...

  2. curl方式创建elasticsearch的mapping

    curl方式创建elasticsearch的mapping curl -XPUT 'http://192.168.1.105:9200/bank/item2/_mapping' -d '{ " ...

  3. elasticsearch的mapping映射

    Mapping简述 Elasticsearch是一个schema-less的系统,但并不代表no shema,而是会尽量根据JSON源数据的基础类型猜测你想要的字段类型映射.Elasticsearch ...

  4. ELK学习总结(4-1)elasticsearch更改mapping(不停服务重建索引)

    elasticsearch更改mapping(不停服务重建索引)原文 http://donlianli.iteye.com/blog/1924721Elasticsearch的mapping一旦创建, ...

  5. elasticsearch更改mapping(不停服务重建索引)

    转载地址:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearc ...

  6. elasticsearch更改mapping,不停服务重建索引(转)

    原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...

  7. 通过Java的Domain类构建ElasticSearch的mapping

    通过给定一个Java的class类自行创建ElasticSearch的mapping Order的domain类 public class Order { public String system_i ...

  8. elasticsearch 修改 mapping

    Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段.但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得 ...

  9. ElasticSearch(5)-Mapping

    一.Mapping概述 映射 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确的字符串值,Elasticsearch需要知道每个字段里面都包含了 ...

随机推荐

  1. OneOS下调试支持的几种方式

    方法论 当我们遇到问题,应该怎么办?这不仅应用于程序开发,也是我们在生活中遇到问题的时候,应该想的事儿,怎么办!趁着此次机会,我好好想了七秒钟. 先问是不是问题,如果不是就不用解决了 如果确实是问题, ...

  2. Docker安装NextCloud使用MySQL

    安装 1.拉取并启动MySQL,最好把数据可目录挂载到宿主机,以便容器被误删后恢复: docker run --name=nextcloud_db \ -e MYSQL_ROOT_PASSWORD=X ...

  3. 前端学做 PPT

    前端学做 PPT 公司做技术分享.年终总结都需要用到ppt. 要快速.省事的做出高质量的 ppt,一方面需要熟练使用制作 ppt 的工具,另一方面得知道用工具做成什么样子才是好作品.前者比较简单,后者 ...

  4. 01 开发App真机调试问题

    逍遥安卓模拟器 :https://juejin.cn/post/7062922018710093831 HBuilderX真机调试插上手机却提示"未检测到手机或浏览器"的问题:ht ...

  5. html元素height(width)是怎么确定的?

    1.若height是确定的(比如height:100px),则height直接可确定(还受min-height,max-height影响,见height,min-height,max-heigth的作 ...

  6. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...

  7. 数据平台调度升级改造 | 从Azkaban 平滑过度到 Apache DolphinScheduler 的操作实践

    Fordeal的数据平台调度系统之前是基于Azkaban进行二次开发的,但是在用户层面.技术层面都存在一些痛点问题难以被解决.比如在用户层面缺少任务可视化编辑界面.补数等必要功能,导致用户上手难体验差 ...

  8. 解决 idea无法下载源码 Sources not found for:XXX

    解决 idea无法下载源码 Sources not found for:XXX 命令行输入 mvn dependency:resolve -Dclassifier=sources 参考 https:/ ...

  9. BZOJ4337 树的同构 (树哈希)(未完成)

    样例迷,没过 交了30pts #include <cstdio> #include <iostream> #include <cstring> #include & ...

  10. React报错之Cannot find namespace context

    正文从这开始~ 总览 在React中,为了解决"Cannot find namespace context"错误,在你使用JSX的文件中使用.tsx扩展名,在你的tsconfig. ...