elasticsearch 映射规则

Mapping简述

Elasticsearch是一个schema-less的系统,但并不代表no shema,而是会尽量根据JSON源数据的基础类型猜测你想要的字段类型映射。
Elasticsearch中Mapping类似于静态语言中的数据类型,但是同语言的数据类型相比,映射还有一些其他的含义。
Elasticsearch会根据JSON源数据的基础类型猜测你想要的字段映射。将输入的数据转变成可搜索的索引项。Mapping就是我们自己定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。

映射的增删改查

Elasticsearch可以根据数据中的新字段来创建新的映射,当然,在正式数据写入之前我们可以自己定义Mapping,
等数据写入时,会按照定义的Mapping进行映射。如果后续数据有其他字段时,Elasticsearch会自动进行处理。

curl -XPUT ‘http://localhost:9200/logstash-2016.01.01/_mapping‘ -d ‘
{
	"mappings" : {
		"syslog" : {
			"properties" : {
				"@timestamp" : {
					"type" : "date"
				},
				"message" : {
					"type" : "string"
				},
				"pid" : {
					"type" : "long"
				}
			}
		}
	}
}
‘

在这里需要注意一下,我们已经存在的索引是不可以更改它的映射的,对于存在的索引,只有新字段出现时,Elasticsearch才会自动进行处理。如果确实需要修改映射,那么就使用reindex,采用重新导入数据的方式完成。

ReIndex

Elasticsearch并不提供针对索引的rename,mapping、alter等操作。如果需要更改某个字段的mapping映射,只有一些其他工具。
用Logstash重建索引:
在最新版的logstash中,对logstash-input-elasticsearch插件做了一定的修改,使得通过Logstash完成重建索引称为可能。

Delete

虽然写入数据时Elasticsearch会自动的添加映射进行处理,但是删除数据并不会删除数据的映射
#curl -XDELETE ‘http://localhost:9200/logstash-2016.01.01/syslog‘ 删除了syslog下面的全部数据,但是syslog的映射还在
删除映射的命令:
#curl -XDELETE ‘http://localhost:9200/logstash-2016.01.01/_mapping‘
删除索引的话映射也会删除
#curl -XDELETE ‘http://localhost:9200/logstash-2016.01.01‘

查看:

学习索引的话最直接的方式就是查看logstash写入数据到Elasticsearch的时候会根据自带的template生成一个很有学习意义的映射

Elasticsearch数据类型

Elasticsearch自带的数据类型数Lucene索引的依据,也是我们做手动映射调整到依据。
映射中主要就是针对字段设置类型以及类型相关参数。
JSON基础类型如下:
字符串:string
数字:byte、short、integer、long、float、double、
时间:date
布尔值: true、false
数组: array
对象: object
Elasticsearch独有的类型:
多重: multi
经纬度: geo_point
网络地址: ip
堆叠对象: nested object
二进制: binary
附件: attachment

注意点:
Elasticsearch映射虽然有idnex和type两层关系,但是实际索引时是以index为基础的。如果同一个index下不同type的字段出现mapping不一致的情况,虽然数据依然可以成功写入并生成并生成各自的mapping,但实际上fielddata中的索引结果却依然是以index内第一个mapping类型来生成的。

自定义字段映射

Elasticsearch的Mapping提供了对Elasticsearch中索引字段名及其数据类型的定义,还可以对某些字段添加特殊属性:该字段是否分词,是否存储,使用什么样的分词器等。

精确索引:

字段都有几个基本的映射选项,类型(type)和索引方式(index)。以字符串类型为例,index有三个选项:
analyzed:默认选项,以标准的全文索引方式,分析字符串,完成索引。
not_analyzed:精确索引,不对字符串做分析,直接索引字段数据的精确内容。
no:不索引该字段。

对于日志文件来说,很多字段都是不需要再Elasticsearch里做分析这步的,所以,我们可以这样设置:

"myfieldname" : {
	"type" : "string",
	"index" : "not_analyzed"
}

时间格式:

@timestamp这个时间格式在Nginx中叫$time_iso8601,在Rsyslog中叫date-rfc3339,在Elasticsearch中叫dateOptionalTime.但事实上,Elasticsearch完全可以接受其他时间格式作为时间字段的内容。对于Elasticsearch来说,时间字段内容实际上就是转换成long类型作为内部存储的。所以,接受段的时间格式可以任意设置:

@timestamp: {
	"type" : "date",
	"index" : "not_analyzed",
	"doc_values" : true,
	"format" : "dd/MM/YYYY:HH:mm:ss Z"
}

多种索引:

多重索引是Logstash用户习惯的的一个映射,因为这是Logstash默认开启的配置:

"title" : {
	"type" : "string",
	"fields" : {
		"raw" : {
			"type" : "string",
			"index" : "not_analyzed"
		}
	}
}

其作用时,在title字段数据写入的时候,Elasticsearch会自动生成两个字段,分别是title和title.raw。这样,有可能同时需要分词和部分次结果的环境,就可以很灵活的使用不同的索引字段了。比如,查看标题中最常用的单词,应该是使用title字段,查看阅读数最多的文章标题,应该是使用title.raw字段。

多值字段:

空字段:

数组可以使空的。这等于有零个值。事实上,Lucene没法存放null值,所以一个null值的字段呗认为是孔子段。
下面这四个字段将被识别为空字段而不被索引:
"empty_string" : "",
"null_value" : null,
"empty_array" : [],
"array_with_null_value" : [ null ]

多层对象:

我们需要讨论的最后一个自然JSON数据类型是对象(object)。

时间: 2024-10-24 17:31:15

elasticsearch 映射规则的相关文章

elasticsearch映射

前面讲到,无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念.但elasticsearch与其它承担着数据存储的技术有着比较大的区别之一就是映射,和倒排索引. 映射是定义如何存储和编制文档及其包含的字段的过程.例如,使用映射来定义: 哪些字符串字段应被视为全文字段. 哪些字段包含数字,日期或地理位置. 文档中所有字段的值是否应该编入catch-all _all字段. 日期值的格式. 自定义规则来控制动态添加

SpringMVC(三)URL请求到Action的映射规则

在SpringMVC(二)经典的HelloWorld实现我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在SpringMVC(二)经典的HelloWorld实现我们在HelloWorldController上配置了一个@RequestMapping(value = "/helloworld")这表示对该controller的所有action请求必须是以"/helloworld"开

EF Code First数据库映射规则及配置

EF Code First数据库映射规则主要包括以下方面: 1.表名及所有者映射 Data Annotation: 指定表名 1 using System.ComponentModel.DataAnnotations;2 3 [Table("Product")]4 public class Product指定表名及用户 using System.ComponentModel.DataAnnotations;[Table("Product", Schema = &qu

SpringMVC注解汇总(二)-请求映射规则

接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", "/user/create"}): 多个URL路径可以映射到同一个处理器的功能处理方法. 2)URI模板模式映射@RequestMapping(value="/users/{userId}"): {×××}占位符, 请求的URL可以是 "/users/123456&q

IIS rewrite映射规则语法格式

IIS rewrite映射规则语法格式,特殊符号:&请用& amp;代替,否则异常. <configuration> <system.webServer> <rewrite> <rules> <rule name="bbs board" enabled="true"> <match url="^forum_([0-9]+)\.htm$" /> <acti

Activiti 5.17 --从Activiti的业务对象到MyBatis SQL Mapping ID的映射规则

Activiti 的业务实体层使用 PersistentObject 向数据层传递数据: MyBatis 使用Mapping中的 id 执行SQL 逻辑: 本文讲述了从Activiti PersistentObject 到 MyBatis SQL id 的映射规则. 一.数据层和数据的关系 二.PersistentObject 对象 三.MyBatis 对应的SQL ID 1.insert <insert id="insertProcessDefinition" paramete

MyBatis-自定义结果映射规则

1.自定义结果集映射规则 ①查询 <!-- public Employee getEmpById(Integer id); --> <select id="getEmpById" resultMap="MySimpleEmp"> select * from tbl_employee where id=#{id} </select> ②结果集映射 <resultMap type="com.atguigu.mybati

Zuul的使用,路由访问映射规则

一.Zuul的介绍 Zuul包含了对请求的路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实力上,是实现外部访问统一入口基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验.服务聚合等功能的基础. Zuul和eureka进行整合,将Zuul自身注册到Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得的. 注意:Zuul最终还是会注册到Eureka. 提供=代理+路由+过滤三大功能 二.路由的基

ElasticSearch映射和分析

分析和分析器 分析(analysis)是这样一个过程: 首先,表征化一个文本块为适用于倒排索引单独的词(term) 然后标准化这些词为标准形式,提高它们的"可搜索性"或"查全率" 这个工作是分析器(analyzer)完成的.一个分析器(analyzer)只是一个包装用于将三个功能放到一个包里: 字符过滤器 首先字符串经过字符过滤器(character filter),它们的工作是在表征化(译者注:这个词叫做断词更合适)前处理字符串.字符过滤器能够去除HTML标记,或