Elasticsearch 映射Mappings (三)

这篇具有很好参考价值的文章主要介绍了Elasticsearch 映射Mappings (三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文主要记录映射Mappings的作用、类型、ES常用数据类型、常见参数、重要的数据类型、映射配置、映射模板。

静态参数使不可修改的,所以mappings里的配置需要谨慎行事


一、Mapping简介

mapping类似Mysql中的表结构,在Maping里包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一份字段可以有多个类型。

查看索引映射

所有(默认创建keyword映射)

GET <索引名>/_mapping
{
  "text_create": {
    "mappings": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

查看指定

GET <索引名>/_mapping/field/<字段名称>
{
  "text_create": {
    "mappings": {
      "name": {
        "full_name": "name",
        "mapping": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

二、自动映射 dynamic mapping

在索引文档写入时发生自动创建mapping的机制。在写入文档时会自动为该文档创建mapping映射字段。在创建索引时不要求创建mapping映射,ES会根据字段值来推断字段类型,进而创建并指定索引类型。

自动类型推断

自动类型推断的规则为:

field type dynamic runtime
true/false boolean boolean
小数 float double
数字 long long
object object -
数组 取决于数组中的第一个非空元素类型 取决于数组中的第一个非空元素类型
日期格式字符串 date date
数字类型字符串 float/long double/long
其它字符串 text + keyword keyword

自动映射器会尽可能的把字段映射为宽字段类型

PUT text_create/_doc/1
{
  "price": 18.12,
  "display": true,
  "object":{
    "1":1,
    "2":2
  },
  "arey" :[
    "3","4"
    ],
    "time": "2011-11-12"
}

mapping对应映射

{
  "text_create": {
    "mappings": {
      "properties": {
        "age": {
          "type": "long"
        },
        "arey": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "display": {
          "type": "boolean"
        },
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "object": {
          "properties": {
            "1": {
              "type": "long"
            },
            "2": {
              "type": "long"
            }
          }
        },
        "price": {
          "type": "float"
        },
        "time": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

mapping注意点

  • ES 没有隐式转换
  • ES 不支持类型修改
  • 生产环境尽可能避免使用 dynamic mapping

三、手动映射 Expllicit mapping

也称为显示映射,在索引文档写入前。创建索引并且指定索引中每个字段类型、分词器等参数。

mapping索引创建完成后,部分mapping的属性时不允许更改的

创建索引

PUT text_mapping
{
  "mappings": {
    "properties": {
      "text_field" : {
        "type": "text",
        "fields": {
          "text_filed_keyword":{
          "type": "keyword"
        }
          
        }
      },
      "long_field": {
        "type": "long"
      }
    }
  }
}


四、自动映射模板 Dynamic Templates

在定义字段映射的时候,往往字段不一定有具体的名称,有时候希望对一类相同或者相似特征的字段定义相同的映射,此时可以使用Dynamic Templates。

定义映射模板

"dynamic_templates": [
  {
    "my_template_name": {
      ... match conditions ...
      "mapping":{...}
    }
  },
  ...
]

规则判定:conditlons

match_mapping_type

用于匹配数据类型

例子

PUT templates_text
{
  "mappings": {
    "dynamic_templates": [
      {
        "integers":{
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      },
      {
        "integers":{
          "match_mapping_type":"string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
      ]
  }
}

插入数据,对应的字段将会自动带上对应的类型。

PUT templates_text/_doc/1
{
  "my_integer": 500,
  "my_string": "smz"
}
      "properties": {
        "my_integer": {
          "type": "integer"
        },
        "my_string": {
          "type": "keyword"
        }
      }

match、unmatch

用以匹配字段名称规则,支持通配符、正则表达式。

正则:

 "match_pattern": "regex",
 "match": "^profit_\d+$"

示例:

PUT templates_text2
{
  "mappings": {
    "dynamic_templates": [
      {
        "longs_as_strings":{
          "match_mapping_type": "string",
          "match": "num_*", #以num_*开头
          "unmatch": "*_text",#不以_text结尾
          "mapping": {
            "type": "long"
          }
        }
      }
      ]
  }
}

path_match、path_unmatch

用于嵌套字段

用例:

PUT templates_text3
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name":{
          "path_match": "name.*", #路径
          "path_unmatch": "*.middle",#路径不匹配
          "mapping": {
            "type": "text",
            "copy_to": "full_name"#符合的字段拷贝到此
          }
        }
      }
      ]
  }
}

分词器变量

PUT templates_text4
{
  "mappings": {
    "dynamic_templates": [
      {
        "named_analyzers":{
          "match_mapping_type": "string",
          "match": "*", 
          "mapping": {
            "type": "text",
            "analyzer": "{name}" #分词器名称
          }
        }
      },
      {
        "no_doc_values":{
          "match_mapping_type": "*",
          "mapping": {
            "type": "{dynamic_type}",
            "doc_values": "false"
          }
        }
      }
      ]
  }
}

以上示例,定义的两个模板,有以下规则:

  • 所有字符串类型的字段,其分词器都会定义为和字段名称一致的分词器
  • 所有非文本类型的字段,都会关闭doc_values

总结

本文主要记录了ES映射以及映射配置、映射模板。文章来源地址https://www.toymoban.com/news/detail-605252.html

到了这里,关于Elasticsearch 映射Mappings (三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch系列 - SpringBoot整合ES:映射中定义字段的数据类型及属性

    ElasticSearch - SpringBoot整合ES:映射定义字段的数据类型及属性 01. ElasticSearch 搜索结果的准确性和召回率是什么? 在Elasticsearch中,搜索结果的准确性和召回率是非常重要的指标,它们反映了搜索引擎的性能和效果。以下是这两个指标的定义和解释: 准确性:搜索结果的准确性

    2024年02月08日
    浏览(47)
  • [golang gin框架] 38.Gin操作Elasticsearch创建索引、修改映射、数据CURD以及数据分页

    常见的 Golang 操作 ElasticSearch 的插件主要有下面两个: 第三方插件: github.com/olivere/elastic 官网插件 github.com/elastic/go-elasticsearch 其中 elastic 比 go-elasticsearch 文档更全面一些,start 量也更多一些,本节讲解 elastic 使用第三方库 https://github.com/olivere/elastic 来连接 ES 并进行操作 注意

    2024年02月09日
    浏览(63)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(61)
  • Elasticsearch的索引和映射:动态映射

    Elasticsearch是一个基于分布式搜索和分析引擎,可以提供实时的、可扩展的、高性能的搜索功能。它是一个基于Lucene的搜索引擎,具有高度可扩展性和高性能。Elasticsearch支持多种数据类型,如文本、数字、日期等,并提供了丰富的查询功能。 在Elasticsearch中,数据是通过索引和

    2024年02月20日
    浏览(49)
  • 九.全文检索ElasticSearch经典入门-ElasticSearch映射修改

    这篇文章的内容是ElasticSearch映射修改,写这篇文章是有水友公司里面遇到了映射修改问题,我这里做了一个整理,希望对你有所帮助。 在ElasticSearch中一旦创建了映射想要进行修改是不被允许的。比如我这里有一个案例 上面创建了索引employee ,同时为其创建映射,指定了id和

    2024年02月05日
    浏览(60)
  • Elasticsearch映射操作(八)

            在使用数据之前,需要构建数据的组织结构。这种组织结构在关系型数据库中叫作表结构,在ES中叫作映射。         作为无模式搜索引擎,ES可以在数据写入时猜测数据类型,从而自动创建映射。但有时ES创建的映射中的数据类型和目标类型可能不一致。当需

    2023年04月09日
    浏览(33)
  • Elasticsearch删除映射类型

    官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html 在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在elasticsearch7.0.0中的API中弃用,并在8.0.0中完

    2024年02月06日
    浏览(37)
  • ElasticSearch 基础(五)之 映射

    本文主要内容转载于:ES Doc - mapping。 映射(Mapping) 是定义文档及其包含的字段如何存储和索引的过程。 每个文档都是字段的集合,每个字段都有自己的数据类型。映射数据时,创建映射定义,其中包含与文档相关的字段列表,决定字段使用什么分词器解析,是否有子字段

    2024年02月01日
    浏览(37)
  • Elasticsearch的映射操作

    本文来记录下Elasticsearch的映射操作 Elasticsearch与mysql数据库对比 映射的概述 有了索引库,等于有了数据库中的 database。 索引库(index)中的映射,类似于数据库(database)中的表结构(table)。 创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型

    2024年01月21日
    浏览(29)
  • Elasticsearch(2)——映射关系

    1 什么是映射 映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的 数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存储这些字 段的。 Elasticsearch 支持如下简单字段类型: (1) 字符串: text,keyword (2)整数:byte,sho

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包