ES - Dynamic templates 动态模板
1、ES Mapping
在lucene中,索引中每个字段都需要指定很多属性,例如:是否分词、采用哪个分词器、是否存储等。
在ES中,其实索引中每个字段也需要指定这些属性,我们有时候并没有对这些属性进行设置,这得益于ES的动态映射(Dynamic Mapping)。
Dynamic Mapping可以解决一部分场景,但有时候ES并不能很好的理解我们的业务数据,这时就需要我们自己指定这些属性(Explicit Mapping)。
例如:
PUT my_index
{
"mappings": {
"doc": {
"properties": {
"title": { "type": "text" },
"name": { "type": "text" },
"age": { "type": "integer" },
"created": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
}
参考:Put Mapping
2、Dynamic templates
之前我们简单聊过Dynamic field mapping,这种方式下字段的映射规则基本都是ES自己决定的。
如果我们不想完全受ES的“控制”,又不想每个字段都自己指定,有什么办法呢?
Dynamic template可以让我们制定一些规则,满足这个需求。
"dynamic_templates": [
{
"my_template_name": {
... match conditions ...
"mapping": { ... }
}
},
...
]
a)my_template_name:模板的名称
b)match conditions:匹配规则
c)mapping:匹配后的mapping规则
2.1 匹配规则
2.1.1 match_mapping_type
这里可以改变ES的想法!本来ES觉得这个字段应该映射成long,那么我们可以修改成integer。
例如:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
},
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
]
}
}
}
2.1.2 match and unmatch
这里主要是对字段名称进行匹配处理。
例如我们想对所有string类型、以long开头、并不以text结尾的字段改成long类型,如下:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_mapping_type": "string",
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
}
这里match还支持正则表达式,例如:
"match_pattern": "regex",
"match": "^profit_\d+$"
2.1.3 path_match and path_unmatch
这里主要是针对对象类型(object)的匹配规则。详细内容参见官方文档。
3、实例说明
3.1 ES默认string类型字段会被映射成text和keyword(sub_field),如果我们想只映射成keyword(用来过滤、排序、统计等),该如何处理?
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
参考:
ES - Dynamic templates 动态模板的更多相关文章
- spark写入ES(动态模板)
使用es-hadoop插件,主要使用elasticsearch-spark-20_2.11-6.2.x.jar 官网:https://www.elastic.co/guide/en/elasticse ...
- Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- vert.x学习(六),动态模板与静态文件的结合
这篇学习在动态模板里面引入css,把动态模板与静态文件结合起来使用. 编写DynamicReference.java package com.javafm.vertx.helloworld; impo ...
- angular2 学习笔记 ( Dynamic Component 动态组件)
更新 2018-02-07 详细讲一下 TemplateRef 和 ViewContainerRef 的插入 refer : https://segmentfault.com/a/1190000008 ...
- ES - dynamic field mapping
Dynamic field mapping 1.我们向es提交一个json对象进行索引,es会对json字段和索引字段进行字段类型适配. 规则如下: 2.string字段的转换规则 当date det ...
- elasticsearch 动态模板设置
自定义动态映射 如果你想在运行时增加新的字段,你可能会启用动态映射.然而,有时候,动态映射 规则 可能不太智能.幸运的是,我们可以通过设置去自定义这些规则,以便更好的适用于你的数据. 日期检测 当 E ...
- elasticsearch 动态模板
在elasticsearch中,如果你有一类相似的数据字段,想要统一设置其映射,就可以用到一项功能:动态模板映射(dynamic_templates). 每个模板都有一个名字用于描述这个模板的用途,一 ...
- Logstash动态模板映射收集Nginx的Json格式日志
Logstash传输给ES的数据会自动映射为5索引,5备份,字段都为text的的索引.这样基本上无法进行数据分析.所以必须将Logstash的数据按照既定的格式存储在ES中,这时候就要使用到ES模板技 ...
- es的索引库模板
在实际的生产中,如果要插入大批量数据的时候需要使用多个索引库,如果我们还是手工指定每个索引的配置信息settings和mappings,是非常耗时的: 针对这种情况,es有index template ...
随机推荐
- 从输入URL按下回车到页面展现,中间发生了什么?
从输入URL按下回车到页面展现,总的来说发生了一下几个过程: DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报文 浏览器 ...
- XShell转发数据库端口
隧道添加 源主机为本地 目标主机为需要转发的主机
- L3-015 球队“食物链” (30 分)
L3-015 球队“食物链” (30 分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席 ...
- keras 入门整理 如何shuffle,如何使用fit_generator 整理合集
keras入门参考网址: 中文文档教你快速建立model keras不同的模块-基本结构的简介-类似xmind整理 Keras的基本使用(1)--创建,编译,训练模型 Keras学习笔记(完结) ke ...
- Linux批量复制文件到文件夹
echo dirname* | xargs -n 1 cp -v filename 把当前目录下 filename文件拷贝到以dirname开头的不同文件夹里.
- Linux_系统管理_网络配置_命令行配置网络
因为格了系统,重新安装了VMware,加载了原来的虚拟机后,因为VMware虚拟网卡Vmnet8的地址已经变了,所以要改变下客户操作系统的地址,结果搞了半天才搞定,这里记下来,希望能够为遇到这类问题的 ...
- timestamp时间格式
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间. 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的 ...
- C++中的基础特性:封装,继承,多态
抽象: 要将现实中的一个具体事务,变成C++中的一个类,例如将现实中的汽车变成代码中的car类.完成这个过程就需要 抽象 这一基本手段. 抽象是指 对具体问题(对象)进行分析概括,找出该类对象的公共性 ...
- mininet的学习之一
mininet命令 (1)--topo (2)--switch (3)--controller (4)--mac 内部交互命令 添加主机 添加链路 添加接口 添加IP 确定是否创建成功 用h1 pin ...
- 解题报告 『机器翻译(vector)』
原题地址 本想练习一下模拟,不过用vector貌似可以轻松水过?(虽然还是模拟) 但突然发现貌似我并不会判断单词是否在内存中出现过? 最后还是靠度娘解决了. 代码如下: #include <bi ...