ElasticSearch之Index Template 和Dynamic Template

写在前面

在ElasticSearch之Mapping 一文中我们一起看了es的dynamic mapping机制,通过该机制允许我们不需要显式的定义mapping信息,而是es根据插入的文档值来自动生成 ,比如插入如下的文档:

{"firstName": "Chan","lastName": "Jackie","loginDate": "2018-07-24"
}

其中firstName和lastName会被映射为text类型,并自动添加keyword类型的子字段 ,loginDate因为数据格式符合日期类型被自动映射为date类型。考虑这样的需求,我们不希望给text类型的字段自动应用多字段,即增加keyword类型的子字段,并且我们也不希望当插入的数据时日期类型时不要映射为date类型,该怎么做呢?此时就可以考虑使用index template,在索引的级别之上来定义所有字段的mapping规则。index template不仅可以来对索引的mapping信息做全局的定义,还可以对index的setting信息做全局定义,如定义分片数,副本数,例子如下:
在这里插入图片描述

如果我们向对字段类型做更加精细的控制,即控制某个字段自动映射的类型,如当某个字段是以is开头时,则自动映射为Boolean类型,此时就需要使用到Dynamic Template机制了,如下例子:
在这里插入图片描述

本部分我们就来详细看下index template机制和dynamic template机制。

1:index template

在es中我们可能需要定义非常多的index,我们可以通过index template来全局的设置某些索引多少分片,多少副本,如何mapping等,这样就不需要每个索引单独指定了,具体关于index tempate直接看下图:
在这里插入图片描述
例子:
在这里插入图片描述
工作方式:
在这里插入图片描述

接着来看demo:

  • 创建2个index template并查看
    第一个索引是tempate_default,第二索引是tempate_test。
# 1:创建第一个index template
# 匹配所有的索引,设置setting,分片和副本都是1
PUT _template/tempate_default
{"index_patterns": ["*"],"order": 0,"version": 1,"settings": {"number_of_shards": 1,"number_of_replicas": 6}
}
# 2:创建第二个template,匹配test开头的索引,再setting中设置分片为1,副本
# 为2,在mapping中设置不自动检测date类型,自动检测整数类型
PUT _template/tempate_test
{"index_patterns": ["test*"],"order": 1,"settings": {"number_of_shards": 1,"number_of_replicas": 2},"mappings": {"date_detection": false,"numeric_detection": true}
}# 3:查看定义的两个index template
GET _template/tempate_*

在这里插入图片描述

  • 创建1个只匹配tempate_default的索引
    在这里插入图片描述
  • 创建1个匹配tempate_test的索引并查看mapping和setting
# 1:创建匹配template_default的索引
PUT test_idx/_doc/1
{"someKey": "someVal"
}
# 2:查看索引的mapping
GET test_idx/_settings
# 2:查看索引的setting
GET test_idx/_mapping

setting和mapping信息如下图:
在这里插入图片描述

  • 创建1个自定义了mapping和seting的索引
# 1:创建自定义了mapping和setting和index
# 在setting中设置副本数为4,在mapping中设置打开自动日期类型检测
PUT assign_idx
{"settings": {"number_of_replicas" : 4},"mappings": {"date_detection" : true}
}# 2:查看mapping和setting
GET assign_idx/_mapping
GET assign_idx/_settings

mapping和setting如下,可以看到使用了自定义的配置:
在这里插入图片描述

2:dynamic template

通过dynamic template是一种根据识别出的类型信息,以及字段名称等来动态设置字段mapping信息的一种机制,如下图:
在这里插入图片描述
看几个例子。

  • 如果text并且以is开头的则映射为Boolean类型,否则类型映射为keyword
    首先来定义索引:
DELETE myidx
PUT myidx
{"mappings": {"dynamic_templates": [{"strings_to_boolean": {"match_mapping_type": "string","match": "is*","mapping": {"type": "boolean"}}},{"strings_to_keyword": {"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}
}

解释如下:
在这里插入图片描述
接着我们来插入一个文档:
在这里插入图片描述

  • 根据文档路径来定义mapping信息
    首先来定义索引:
DELETE myidx
PUT myidx
{"mappings": {"dynamic_templates": [{"copy_to_fullname": {"path_match": "name.*","path_unmatch": "*.middle","mapping": {"type": "text","copy_to": "full_name"}}}]}
}

解释如下:
在这里插入图片描述
插入文档:
在这里插入图片描述
尝试搜索 full_name:

# 可以搜索到,因为first由copy_to
GET myidx/_search?q=full_name:"111"
# 搜索不到,因为middle没有copy_to
GET myidx/_search?q=full_name:"222"
# 可以搜索到,因为last由copy_to
GET myidx/_search?q=full_name:"333"

3:dynamic mapping,index template,dynamic template

dynamic mapping 是一种es自动根据值来生成mapping信息的一种机制。index template是在索引级别上来预定义mapping和setting信息的一种机制,dynamic tempalte是在字段级别上来预定义mapping信息的一种机制。

写在后面

参考文章列表

ElasticSearch之Mapping

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478507.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0,目前大规模使用的版本 HTTP/1.1; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同,HTTP 的报文格式&a…

CPU设计之分支预测

1、引言 在之前的学习过程中,我们一直在假设程序是顺序执行的。PC每一次都默认4,一直这样周而复始。然而CPU就和人生一样,不可能一直一帆风顺的向前走。在某些场合我们总是需要做出决策,这些决策点,就像高速公路的一个…

LeetCode JS专栏刷题笔记(一)

一、前言 LeetCode 在前不久出了一个 JavaScript 专栏,这个专栏一个目的是为了非前端工程师学习 JS,另一个是为了前端工程师提升 JS 能力。 因此在这个专栏中,基本不涉及什么具体算法问题,都是一些 JS 的入门语法与常见的 JS 面…

Jmeter教程-JMeter 环境安装及配置

Jmeter教程 JMeter 环境安装及配置 在使用 JMeter 之前,需要配置相应的环境,包括安装 JDK 和获取 JMeter ZIP 包。 安装JDK 1.JDK下载 示例环境为Windows11环境,读者应根据实际环境下载JDK的安装包。 JDK下载地址: Java21 下载 …

指针的进阶(C语言)(上)

目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2 数组名VS&数组名 3.3数组指针的运用 前言 对于指针,我们已经有了初步认识(可以看我写的指针详解那一篇文章)。 简单总结一下基本概念: 1、指针就…

LeetCode 热题 100 | 二叉树(中下)

目录 1 基础知识 1.1 队列 queue 1.2 栈 stack 1.3 常用数据结构 1.4 排序 2 98. 验证二叉搜索树 3 230. 二叉搜索树中第 K 小的元素 4 199. 二叉树的右视图 菜鸟做题忘了第几周&#xff0c;躺平过了个年TT 1 基础知识 1.1 队列 queue queue<type> q…

【基础】电容降压电路的特点及元器件选择

电容降压电路的特点及元器件选择 在电子制作时&#xff0c;为了减小体积、降低成本&#xff0c;往往采用电容降压的方法代替笨重的电源变压器。采用电容降压方法如元器件选择不当&#xff0c;不但达不到降压要求&#xff0c;还有可能造成电路损坏。本文从实际应用角度&#xf…

比特浏览器bit_selenium3bit_selenium4使用

bit_selenium3 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from bit_api import *# /browser/open 接口会返回 selen…

Linux常用操作指令

Linux常用操作指令 ls 指令 语法&#xff1a;ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头…

RK3568平台 有线以太网接口之MAC芯片与PHY芯片

一.平台网络网络通路 平台有线以太网通路&#xff1a;有线以太网一般插入的是RJ45 座要与 PHY 芯片&#xff08;RTL8306M&#xff09;连接在一起&#xff0c;但是中间需要一个网络变压器&#xff0c;网络变压器经过模数转换后到达网卡(RTL8111)转换为帧数据后到达SOC。 二.网络…

内存计算研究进展-技术架构

内存计算技术是一个宏观的概念&#xff0c;是将计算能力集成到内存中的技术统称。集成了内存计算技术的计算机系统不仅能直接在内存中执行部分计算&#xff0c;还能支持传统以CPU为核心的应用程序的执行。区别于内存计算&#xff0c;存算一体芯片将存储与计算相结合&#xff0c…

【Java基础知识(1)】对象在内存中的存储

Java对象是如何在内存中存储的&#xff1f; 在Java中&#xff0c;所有的对象被动态地分配在堆中。这和C不同&#xff0c;C允许对象被存储在堆或者栈中。 参考Oracle官方文档&#xff1a;官方文档说明 在Java中创建字符串对象的2种方法&#xff1a; 1、 使用String关键字&am…