• Elasticsearch的mapping讲解


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

    映射定义具有:

    • 元字段
      元字段用于自定义如何处理关联的文档元数据。包括文档 _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创建带有显式映射的新索引。

    PUT /my-index
    {
      "mappings": {
        "properties": {
          "age": {
            "type": "integer"
          },
          "email": {
            "type": "keyword"
          },
          "name": {
            "type": "text"
          }
        }
      }
    }
    

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

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

    PUT /my-index/_mapping
    {
      "properties": {
        "employee-id": {
          "type": "keyword",
          "index": false
        }
      }
    }
    

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

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

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

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

    GET my-index/_mapping
    

    API返回以下响应:

    {
      "my-index" : {
        "mappings" : {
          "properties" : {
            "age" : {
              "type" : "integer"
            },
            "email" : {
              "type" : "keyword"
            },
            "employee-id" : {
              "type" : "keyword",
              "index" : false
            },
            "name" : {
              "type" : "text"
            }
          }
        }
      }
    }
    
    

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

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

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

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

    API返回以下响应:

    {
      "my-index" : {
        "mappings" : {
          "employee-id" : {
            "full_name" : "employee-id",
            "mapping" : {
              "employee-id" : {
                "type" : "keyword",
                "index" : false
              }
            }
          }
        }
      }
    }
    
    
  • 相关阅读:
    $dp$模板
    字符串基础
    基础算法

    图论
    山中无甲子,寒尽不知年
    模板集合(持续更新)
    数学基础——同余
    9.19 考试总结
    1-5-17:菲波那契数列
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12843221.html
Copyright © 2020-2023  润新知