ElasticSearch教程(5)——关于动态Mapping和Templates
1. 类型判定
ElasticSearch在创建index的时候是可以不指定schema的,那么它是怎么知道你使用的是什么类型呢?实际上它是通过给定document的json来判定的,例如,string的话是用引号引起来的,数字是光溜溜的,boolean类型是true或者false等等。这个规则非常的简单,但是非常有效。例如有如下的json:
ES能够很容易判定field1为string类型,field2为数字类型,但是有些情况下,需要把所有的格式都存为string,true和false就不行了,因为ES会优先将其存为boolean类型,这就需要我们手动指定schema,另外一个问题是,如果我们对某个index首次插入数据的时候为某个field插入了一个数字类型,例如:
1 |
curl -XPUT localhost: 9200 /blog/article/ 1 ?pretty -d '{ "field1" : 1024}'
|
我们可以查看其mapping:
1 |
curl -XGET localhost: 9200 /blog/_mapping?pretty
|
我们可以看到其schem如下:
7 |
"ignore_malformed" : false
|
这说明ES已经将该字段的类型定义为long了,然后如果我们插入string,那么就会报错,说类型不匹配:
1 |
curl -XPUT localhost: 9200 /blog/article/ 2 ?pretty -d '{
|
2 |
"field1" : "test string"
|
返回结果为:
2 |
"error" : "MapperParsingException[Failed to parse [field1]];
|
3 |
nested: NumberFormatException[For input string:
|
但是,如果继续插入float型数据是可以的,因为long可以转换为float,如下:
1 |
curl -XPUT localhost: 9200 /blog/article/ 2 ?pretty -d '{
|
这时,我们在查看schema,可以看到ES将schema修改了。这就会对我们的数据精度造成影响,为了防止这种情况,或者为了防止已经存在的index添加字段,我们可以将动态schema关闭,如下:
2.动态mapping
有时,我们需要通过json中的field和type来决定我们使用的mapping,这时,动态templates就派上用场了。动态templates和普通的mapping类似,它有一个自己的模式,如果一个field的名字匹配了该模式,该template就会使用,下面是定义模式的两种手段:
-
match
: template在field名匹配的时候起用。
-
unmatch
: template在field名不匹配的时候起用。
当然,也可以使用path_match
和path_unmatch对嵌套field使用。
定义field的使用可以使用
-
{name}
: document最初写入数据的field的名字。
-
{dynamic_type}
: document最初写入数据的field的type。
需要提醒的是,ES是按照你写的templates的顺序来匹配的,因此,匹配范围越广的应该放在越后,不然就会将所有后面的正则拦掉了。例如*应该放在最后:
4 |
"dynamic_templates" : [
|
9 |
"type" : "multi_field" ,
|
11 |
"{name}" : { "type" : "{dynamic_type}" },
|
12 |
"str" : { "type" : "string" }
|
from http://www.dengchuanhua.com/234.html
分享到:
相关推荐
elasticsearch中文文档——基于7.11.zip
ES教程,包含es下载,搭建,使用。简单实用。适用于高并发,大数据访问的项目。
ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程ElasticSearch笔记教程Elastic...
最完整的Elasticsearch 基础教程,欢迎大家一起探讨学习!
分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...
openGL教程之—— OpenGL 编程指南(含源码)
---05Lucene的API介绍-复杂查询.mp4┃---06ElasticSearch简介.mp4┃---07ES和Solr的对比.mp4┃---08CentOS7的安装.mp4┃---09CentOS7的特殊命令.mp4┃---10keepalived说明.mp4┃---11虚拟keepalive
本视频教程是介绍 ElasticSearch SQL 功能的视频。 If you (or others you know) are versed in SQL statements and newer to the Elasticsearch query syntax but want to benefit from the power Elasticsearch, ...
ElasticSearch实战教程
目前网上找到的elasticsearch教程都比较旧 ElasticsearchRepository方法在新版本基本过时了 基于springdata的CrudRepository操作ES封装的比较完善,但网上的教程比较少 二、准备工作 1、下载elasticsearch 2、...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
ElasticSearch是一个基于...09_Elasticsearch 如何做映射mapping 10_Elasticsearch 基本查询 11_Elasticsearch filter查询 12_Elasticsearch 组合查询 13_Logstash 介绍以及初步安装 14_Logstash 配置语法以及插件
资源方法有单个的增删改查,模糊查询分页 ,固定字段的模糊查询,所有属性字段的模糊查询
elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载
elasticsearch-net-example, 用于Elasticsearch和NEST的教程库 NuSearch帮助你通过嵌套( 官方 Elasticsearch. NET 客户端) 开始Elasticsearch... Elasticsearch 5.x按照最新的稳定Elasticsearch版本的教程,请使用 5.x
Elasticsearch Java教程.pdf
非常详细的elasticsearch完整基础教程,含有实例等内容
Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...
arcgis elasticSearch es 矢量数据导入插件 数据建模 mapping indexsetting 字段映射 索引建模支持geoshape、shape,text索引支持keyword/ngram/edgeNgram/ikSmart,快速导入,兼容multipolygon,带洞,多面,使用时...
因为你不知道将Hive的数据导入到了ElasticSearch后,数据量是否准确,所以需要钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量,注意,这个项目打包后,最好另起一个进程调用,并且开始时间为文章1或者2最大...