前篇说过,ES可以自动为文档设定索引。但是问题也来了——如果默认设置的索引不是我们想要的,该怎么办呢?

要知道ES这种搜索引擎都是以Index为实际的分区,Index里面包含了不同的类型,不同的类型是逻辑上的分区;每种类型可能包含有相同的字段,如果字段的类型相同还好,如果不同....那就会导致字段的冲突了。

本篇就讲述如何使用REST API以及Logstash设置默认的索引。

更多内容参考:Elasticsearch知识汇总

使用Rest API设置默认的索引

首先先看一下不设置默认索引时,我们想要索引一个IP地址的字段,会发生什么?输入下面的命令:

$ curl -XPUT localhost:/test/test/ -d '{"ip":"192.168.0.1"}'

查看映射可以发现,我们想要存储成IP类型,但是默认给存储成了字符串类型:

$ curl -XGET localhost:/test/_mapping?pretty           {
"test" : {
"mappings" : {
"test" : {
"properties" : {
"ip" : {
"type" : "string"
}
}
}
}
}
}

这并不是我们想要的。

由于映射一旦设定好了,就不能修改了。因此再次实验的时候,需要删除索引test

$ curl -XDELETE localhost:/test                        
{"acknowledged":true}

然后设置test的默认映射:

$ curl -XPUT localhost:/test?pretty -d '{"mappings":{"_default_":{"properties":{"ip":{"type":"ip"}}}}}'

上面的命令中,设置test索引中,默认字段ip的属性为ip。这样我们查询test的映射时,发现ip字段已经被设置为ip:

$ curl -XGET localhost:/test/_mapping?pretty           {
"test" : {
"mappings" : {
"_default_" : {
"properties" : {
"ip" : {
"type" : "ip"
}
}
}
}
}
}

然后插入一段数据,为了观察到插入数据后的映射的变化,可以多插入一个字段:

$ curl -XPUT localhost:/test/test/ -d '{"name":"xingoo","ip":"192.168.0.1"}'

然后查询映射,可以读取到默认映射信息以及当前的映射信息:

$ curl -XGET localhost:/test/_mapping?pretty           {
"test" : {
"mappings" : {
"test" : {
"properties" : {
"ip" : {
"type" : "ip"
},
"name" : {
"type" : "string"
}
}
},
"_default_" : {
"properties" : {
"ip" : {
"type" : "ip"
}
}
}
}
}
}

恭喜~IP字段的类型已经变成了ip,类似的,我们可以设置date,geo,object等类型。

在Logstash中配置默认的索引

Logstash中默认索引的设置是基于模板的,原理上跟上面差不多。

首先我们需要指定一个默认的映射文件,文件的内容大致如下:

{
"template" : "logstash-*",
"mappings" : {
"_default_" : {
"properties" : {
"ip" :{
"type":"ip"
}
}
}
}
}

其中template定义了匹配的索引模式,如果针对于特定的某个索引,则直接写成索引的名字即可。下面定义了映射的相关信息,与API的内容相同。

有了上面的配置文件,就可以在Logstash中配置output插件了:

output {
elasticsearch {
host => "localhost" #ES的服务器地址
protocol => "http" #使用的协议,默认可能会使用Node,具体还要看机器的环境
index => "logstash-%{+YYYY.MM.dd}" #匹配的索引模式
document_type => "test" #索引的类型,旧的配置会使用index_type,但是这个字段在新版本中已经被舍弃了,推荐使用document_type
   manage_template => true #注意默认为true,一定不能设置为false
template_overwrite => true #如果设置为true,模板名字一样的时候,新的模板会覆盖旧的模板
template_name => "myLogstash" #注意这个名字是用来查找映射配置的,尽量设置成全局唯一的
   template => "D:/test/logstash.conf" #映射配置文件的位置
}
}

其中后四个是使用默认映射需要注意的地方,详细的可以多了解Logstash的源码。

参考

【1】_default_映射:https://www.elastic.co/guide/en/elasticsearch/reference/current/default-mapping.html

【2】Elasticsearch output插件:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

【3】ELK电子书:http://kibana.logstash.es/content/logstash/plugins/output/elasticsearch.html

Elasticsearch之_default_—— 为索引添加默认映射的更多相关文章

  1. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  2. elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解

    一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...

  3. Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)

    Elasticsearch之重要核心概念如下: 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是 ...

  4. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  5. IS加载JSON 和 MP4文件 错误 404 提示 需要添加mime映射(默认IIS Express里没有映射)

    问题描述 在发布项目的时候,有一些文件是json文件,在网页中进行加载,但是在IIS7发布的时候,json文件居然是404,无法找到,在URL上输入地址也一样. 错误原因 IIS内部机制,不支持直接访 ...

  6. Elasticsearch(八)【NEST高级客户端--Mapping映射】

    要使用NEST与Elasticsearch进行交互,我们需要能够将我们的解决方案中的POCO类型映射到存储在Elasticsearch中的反向索引中的JSON文档和字段.本节介绍NEST中可用的所有不 ...

  7. ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询

    基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...

  8. ES入门三部曲:索引操作,映射操作,文档操作

    ES入门三部曲:索引操作,映射操作,文档操作 一.索引操作 1.创建索引库 #语法 PUT /索引名称 { "settings": { "属性名": " ...

  9. EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射

    I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...

随机推荐

  1. Swift语言的基础详解

    1.1.关于swift · Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采 ...

  2. HTML5学习生涯1--touchmove中遇到的问题

    在使用html5做在手机上显示轮播图片的效果时突然遇到touchmove事件在touchstart事件之后只触发了一次touchmove之后和touchend一起触发了一次,咦,这是怎么回事?怎么不和 ...

  3. Linux下添加新硬盘,分区及挂载(转)

    挂载好新硬盘后输入fdisk -l命令看当前磁盘信息,卸载硬盘分区 umount /dev/sdb 可以看到除了当前的第一块硬盘外还有一块sdb的第二块硬盘,然后用fdisk /dev/sdb 进行分 ...

  4. jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求

    这是今天遇到的一个实际问题,在这篇随笔中记录一下解决方法. ASP.NET Web API提供了CORS支持,但ASP.NET MVC默认不支持,需要自己动手实现.可以写一个用于实现CORS的Acti ...

  5. javascript 设计模式-----观察者模式

    观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...

  6. 上层建筑——DOM元素的特性与属性(dojo/dom-attr)

    上一篇返本求源中,我们从DOM基础的角度出发,总结了特性与属性的关系.本文中,我们来看看dojo框架是如何处理特性与属性的.dojo框架中特性的处理位于dojo/dom-attr模块属性的处理为与do ...

  7. clearTimeout消除闪动

    需求:当鼠标放到父级菜单上面的时候,显示下方的子菜单.鼠标从子菜单或者父级菜单上面移开的时候,子菜单要收起来.最终效果如下: PS:这样需求很常见,最常见的做法是li元素下面再嵌套一个Ul元素来包含子 ...

  8. Entity Framework 5.0系列之Code First数据库迁移

    我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...

  9. C#实现的等额本息法、按月付息到期还本法、一次性还本付息法

    你若懂行,那便有用,如下: void Main(){    var x = DengEBenXi.Compute(11111, 12, 3);    x.Dump();    var y = AnYu ...

  10. 每天一个linux命令(59):rcp命令

    rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. 1 ...