专栏首页xingoo, 一个梦想做发明家的程序员Elasticsearch之_default_—— 为索引添加默认映射

Elasticsearch之_default_—— 为索引添加默认映射

前篇说过,ES可以自动为文档设定索引。但是问题也来了——如果默认设置的索引不是我们想要的,该怎么办呢? 要知道ES这种搜索引擎都是以Index为实际的分区,Index里面包含了不同的类型,不同的类型是逻辑上的分区;每种类型可能包含有相同的字段,如果字段的类型相同还好,如果不同....那就会导致字段的冲突了。 本篇就讲述如何使用REST API以及Logstash设置默认的索引。 更多内容参考:Elasticsearch知识汇总

使用Rest API设置默认的索引

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

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

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

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

这并不是我们想要的。

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

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

然后设置test的默认映射:

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

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

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

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

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

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

$ curl -XGET localhost:9200/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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构:线索二叉树(Threaded Binary Tree)

    我们知道满二叉树只是一种特殊的二叉树,大部分二叉树的结点都是不完全存在左右孩子的,即很多指针域没有被充分地利用。另一方面我们在对一棵二叉树做某种次序遍历的时候,...

    s1mba
  • window系统下面实现mysql主从数据库同步

    今天给大家介绍一下window系统下mysql如何实现主从同步操作,首先得需要安装两台mysql服务器,我在这里浪费了相当多的时间 因为刚开始我想着是在wind...

    用户1149268
  • 新年新语言,WCDB Swift

    WCDB 作为微信的开发者们的需求,并不断优化性能。而这其中,呼声最高的莫过于对 Swift 的支持。

    旺仔小小鹿
  • SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作

    今天给大家介绍一下如何SpringBoot中连接Mysql数据库,并使用JPA进行数据库的相关操作。 步骤一:在pom.xml文件中添加MYSQl和JPA的相关...

    用户1149268
  • MYSQL数据库设计之字段选择原则

    今天给大家介绍一下数据库设计过程中字段的选择原则,也就是什么时候用int、什么时候用varchar、什么时候用char等等之类的。 关于字段的选择其实很多地方都...

    用户1149268
  • Seq2Seq模型

    前言: 此文翻译自TensorFlow tutorial: Sequence-to-Sequence Models 本文的尽量在做到意思正确的情况下,做到不...

    用户1148830
  • 利用mycat实现mysql读写分离

    实现mysql读写分离的工具有很多种,我这里就介绍mycat这一种方式。其它的大家有兴趣可以自己去了解。 第一步:首先就是mycat的安装: 这个地址就可以下载...

    用户1149268
  • SpringBoot中实现邮件找回密码的功能

    今天给大家介绍一下很常用的一个功能,就是邮件找回密码功能。找回密码一般会有:1.邮件找回密码、2短信找回密码、3问题找会密码。 关于邮件找回密码的原理思想为: ...

    用户1149268
  • 江湖秘笈:Web有隐藏的小秘密?这都不叫事!看DirBuster亲自出马找出它们来!

    Hello,亲爱的看官们,大家晚上好,经过两天的艰苦工作,是否稍稍解决一点点节后综合症的困扰了呢? 要知道,今天已经过了周三,再艰苦两天,看官们就又要过周末双休...

    企鹅号小编
  • SpringBoot JPA 表关联查询

    今天给大家介绍一下如何利用JPA实现表关联查询。 今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。 例子中总共有两个实体类,一个...

    用户1149268

扫码关注云+社区

领取腾讯云代金券