ES之API系列--dynamic template(动态模板)的用法(有实例)

这篇具有很好参考价值的文章主要介绍了ES之API系列--dynamic template(动态模板)的用法(有实例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文网址:ES之API系列--dynamic template(动态模板)的用法(有实例)_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍ElasticSearch的dynamic template(动态模板)的用法(有实例)。

官网网址

https://www.elastic.co/guide/en/elasticsearch/reference/8.0/dynamic-templates.html

动态模板的作用

作用概述

        动态模板是针对某个具体的索引来设定的,即在创建某个具体的索引时指定。

使用场景

根据ES自动识别字段类型的这个特性,去设置一些特殊字段的名称为某些特定的类型。例如:

  • 设置所有字符串类型的字段都为 keyword
  • is 开头的字符串都设置成为 boolean 类型

match-mapping-type

概述

        在没有设置_mapping时,ES根据文档字段的类型进行动态映射。在这种方式下,会对JSON的数据类型动态定义ES的数据类型。

JSON数据类型

ES数据类型

null

不添加字段

true / false

boolean

double

float

long

long

object

object

array

根据数组中第一个非null值的类型

通过日期检测的string

date

通过数字检测的string

float 或 long

没有通过上面2个检测的string

带.keyword子字段的text类型

实例

PUT /es-learn-doc-person/_create/1
{
    "name":"zhang san",
    "age":29
}

动态映射下的mapping:

{
  "es-learn-doc-person" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

        这个文档中age自动映射成了long,但是integer类型完全满足当前数据的存储。假设这样一种场景,对于公司的数据中的整数数值部分,绝大部分integer能够满足存储需求,那么我们可以使用Dynamic Template来动态的映射。 方法是:

PUT es-learn-000002
{
  "mappings": {
    "dynamic_templates": [
      {
        "integers": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      }
    ]
  }
}

对于索引es-learn-000002使用的动态模板,我们插入同样的用户信息。 

PUT es-learn-000002/_doc/1
{
    "name":"zhang san",
    "age":29
}

查看相应的mapping

ES之API系列--dynamic template(动态模板)的用法(有实例)

match与unmatch

概述

        match与unmatch是对字段名称进行匹配处理。

        对于嵌套对象,match 和 unmatch 只作用于最后一级字段名。

  • match:字段名称匹配某规则
  • unmatch :字段名称不匹配某规则
  • match_pattern:匹配使用的模式。如果设置为regex,则match 和 unmatch 支持正则表达式。例如:
    "match_pattern": "regex",
    "match": "^profit_\d+$"

示例

需求

  • 设置所有字符串类型的字段都为 keyword
  • is 开头的字符串都设置成为 boolean 类型

方法

PUT my_index
{
    "mappings": {
        "dynamic_templates": [{
                "strings_as_boolean": {
                    "match_mapping_type": "string",
                    "match": "is*",
                    "mapping": {
                        "type": "boolean"
                    }
                }
            }, {
                "strings_as_keywords": {
                    "match_mapping_type": "string",
                    "mapping": {
                        "type": "keyword"
                    }
                }
            }
        ]
    }
}

path_match 和 path_unmatch

概述

        match 和 unmatch 只作用于最后一级的字段名,对于一个有多层的内嵌对象,可以用path_match 和 path_unmatch。(ES是支持存储对象的),例如:some_object.*.some_field。

示例

若值是对象类型,以name开头且不以middle结尾则copy到full_name字段中。

设置mapping:

PUT my_index
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
          "path_match":   "name.*",
          "path_unmatch": "*.middle",
          "mapping": {
            "type":       "text",
            "copy_to":    "full_name"
          }
        }
      }
    ]
  }
}

插入数据

PUT my_index/_doc/1
{
  "name": {
    "first":  "John",
    "middle": "Winston",
    "last":   "Lennon"
  }
}

查看数据

GET my_index/_search?q=full_name:John

索引模板与动态模板结合

本处我没有尝试,但我猜测索引模板与动态模板可以同时使用,例如:文章来源地址https://www.toymoban.com/news/detail-415636.html

PUT  _index_template/event_log_template
{
    "index_patterns": ["event_log_*"],
    "template": {
        "settings": {
            "number_of_shards": 5,
            "number_of_shards": 1
        },
        "mappings": {
            "dynamic_templates": [{
                    "dynamicFields": {
                        "match_mapping_type": "string",
                        "path_match": "dynamicFields.*_sku_attr",
                        "mapping": {
                            "type": "keyword"
                        }
                    }
                }
            ],
            "properties": {
                "id": {
                    "type": "keyword"
                },
                "category_first_id": {
                    "type": "keyword"
                },
                "category_first": {
                    "type": "keyword"
                }
            }
        }
    }

}

到了这里,关于ES之API系列--dynamic template(动态模板)的用法(有实例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ES 10 - 如何使用Elasticsearch的索引模板(index template)

    本文转载自:ES 10 - 如何使用Elasticsearch的索引模板(index template) - 瘦风 - 博客园 索引模板: 就是把已经创建好的某个索引的参数设置(settings)和索引映射(mapping)保存下来作为模板, 在创建新索引时, 指定要使用的模板名, 就可以直接重用已经定义好的模板中的设置和映射. (1) sett

    2024年02月15日
    浏览(28)
  • .Net Core后端架构实战【2-实现动态路由与Dynamic API】

    摘要:基于.NET Core 7.0WebApi后端架构实战【2-实现动态路由与Dynamic API】  2023/02/22, ASP.NET Core 7.0, VS2022 在.Net Core WebAPI程序中通过可全局或局部修改的自定义Route属性和URL映射组件匹配传入的HTTP请求替代默认路由即为动态路由 在3.1以及5.0的版本中,Configure方法中会自动添加Use

    2023年04月08日
    浏览(35)
  • ​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

            在很多搜索场景中,我们希望能够搜索出搜索词相关的目标,同时也希望能搜索出其近义词相关的目标。例如在商品搜索中,搜索“ 瓠瓜 ”,也希望能够搜索出“ 西葫芦 ”,但“ 西葫芦 ”商品名称因不含有“ 瓠瓜 ”,导致无法搜索出来。         此时就

    2024年02月09日
    浏览(34)
  • ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词

    修改源码实现连接数据库获取近义词汇 下载elasticsearch-analysis-dynamic-synonym打开项目(https://github.com/bells/elasticsearch-analysis-dynamic-synonym/tree/master) 引入依赖 将pom文件中的版本修改成跟你的es版本号一样的,比如我的是7.2.0 使用不同的版本对应的lucene包不同,某些代码略有不同,

    2024年02月04日
    浏览(43)
  • 改进YOLO系列 | YOLOv5/v7 引入 Dynamic Snake Convolution | 动态蛇形卷积

    准确分割拓扑管状结构,如血管和道路,在各个领域中至关重要,可以确保下游任务的准确性和效率。然而,许多因素使任务复杂化,包括细小的局部结构和可变的全局形态。在这项工作中,我们注意到管状结构的特殊性,并利用这一知识来引导我们的DSCNet,以在三个阶段同

    2024年02月07日
    浏览(29)
  • 【C++系列P7】格式与实例化操作——[模板]详解

     前言 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁,主要内容含 目录 一.模板  1.函数模板 一.函数模板概念 二.函数模板的格式 三.函数模板的实例化  1.隐式实例化 2.显式实例化  3.模板参数的匹配原则  2.类模板 一.类模板的格式 二

    2024年02月10日
    浏览(33)
  • Resthighlevelclient被弃用后,ES 8.x 最新用法 java api

    一、ES 8.x 整合springBoot 1、导入依赖 2、创建 ElasticsearchClient 二、ES java api 1、搜索 2、单个插入(更新)文档 3、批量插入(更新)文档

    2024年02月14日
    浏览(31)
  • DYnamics 365如何隐藏实体列表页面home page页面上的PowerBI按钮和EXCEL template按钮

    如何隐藏以上两个按钮,用ribbon工具根本找不到这2个按钮。 解决方案:添加一个没用的按钮,通过调用enable方法来隐藏。 // JavaScript source code function HiddenButton() { HiddePowerBIButton(); HiddeDocumentTemplateButton(); return false } function HiddePowerBIButton() { } function HiddeDocumentTemplateButton() { } f

    2024年02月11日
    浏览(32)
  • 浅谈WPF之控件模板Control Template和数据模板Data Template

    WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计,同时还推出了以模板为核心的新一代设计理念。在WPF中,通过引入模板,将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类:数据模板【Data Template】和控件模板【Control Template】 基本上,ControlT

    2024年02月03日
    浏览(27)
  • es elasticsearch 九 索引index 定制分词器 type结构后期弃用原因 定制动态映射 动态映射模板 零停机重建索引

    目录 索引index 定制分词器 Type底层结构及弃用原因 定制 dynamic mapping 定制dynamic mapping template 动态映射模板 零停机重建索引 生产环境应该度别名数据 索引index Put /index Stings 分片 Mapping 映射 Aliases 别名 增加 Put my_index2 {        \\\"settings\\\":{           \\\"number_of_shards\\\":3,      

    2024年02月06日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包