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 5.x 版本的 Java API 手册是开发者进行 Elasticsearch 相关开发的重要参考资料。Elasticsearch 是一个流行的开源全文搜索引擎,广泛应用于数据检索、分析和实时数据存储。Java API 提供了与 Elastic...
4. **类型(Type)**: 在Elasticsearch 2.0及之后的版本中,已经被废弃,取而代之的是索引模板(Index Templates),用于定义文档的结构。 5. **文档(Document)**: 是索引中的基本数据单元,可以视为JSON对象。 6. *...
3. **索引管理**:Elasticsearch 5.1 支持动态创建和管理索引,如设置映射(mapping)来定义字段类型,以及调整索引设置如分片和副本的数量。 4. **搜索功能**:支持全文搜索、布尔查询、短语匹配、模糊匹配、范围...
总的来说,Elasticsearch Head是Elasticsearch用户和管理员的一款实用工具,它简化了对Elasticsearch的操作,提高了工作效率,同时也降低了理解和使用Elasticsearch的门槛。无论是进行日常运维,还是进行问题排查,...
【Elasticsearch 演讲PPT】的内容涵盖了Elasticsearch的基本概念、核心特性以及其在实际应用中的价值。以下是对这些知识点的详细说明: 1. **Elasticsearch概述**: Elasticsearch是一个基于Apache Lucene的开源...
这个工具使得管理员可以高效地监控和操作Elasticsearch的各个方面,包括但不限于集群状态、节点信息、索引管理和分片管理。下面将详细阐述这些关键知识点。 **Elasticsearch** 是一个分布式、开源的搜索引擎,广泛...
10.8.3 Leverage an ES Repository Mapping in SAP BPM 10.9 Exercise: Creating an SAP Business Process Management Process 10.9.1 Exercise Description 10.9.2 Exercise Solution Approach 10.9.3 ...
6. **日志样本和数据模版**:为了演示或测试,可能会有预定义的日志样本文件和Elasticsearch的映射模版(mapping templates)。 在实际使用中,ELK Stack可以用于各种场景,如应用程序日志分析、安全事件监控、网站...
- **Overview of Mapping Objects in the ES Repository**: Understanding the objects used for mapping, such as mapping functions and variables. - **Operation Mapping**: Mapping operations that define how...
30.6. Elasticsearch 30.6.1. Connecting to Elasticsearch by Using Jest 30.6.2. Connecting to Elasticsearch by Using Spring Data 30.6.3. Spring Data Elasticsearch Repositories 30.7. Cassandra 30.7.1. ...
Added a search/replace to the script editors You can now delete addresses and reset the count from "Find what addresses this code accesses" Added a statusbar to the hexview in memoryview Pointerscan ...