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模板网!

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

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

相关文章

  • .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日
    浏览(44)
  • 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日
    浏览(55)
  • ​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

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

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

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

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

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

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

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

    2024年02月14日
    浏览(42)
  • 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日
    浏览(40)
  • 浅谈WPF之控件模板Control Template和数据模板Data Template

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

    2024年02月03日
    浏览(34)
  • 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日
    浏览(39)
  • 【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

      作为一名爬虫开发者来说,涉及数据采集和爬虫开发时,往往都面临着各种挑战。包括技术 复杂性、维护成本以及数据源结构的不断变化 早期我们对爬虫开发方式需要深入了解底层框架和编写大量的自定义代码,这对于没有技术背景的人来说可能是一个门槛过高的任务

    2024年02月05日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包