文档章节

Elasticsearch学习(六):Elasticsearch创建

howsweet
 howsweet
发布于 2017/08/17 15:40
字数 1345
阅读 35
收藏 1
点赞 0
评论 0

一、创建索引index

创建名为newindex的索引(索引名必须为小写): 提交请求newindex PUT,创建成功出现下面结果:

{
    "acknowledged": true
}

查看新建的索引:newindex GET,结果如下:

{
    "newindex": {
        "aliases": { },
        "mappings": { },
        "settings": {
            "index": {
                "creation_date": "1491980889980",
                "uuid": "DvFfvO0JQ46Bbb0u64rgsw",
                "number_of_replicas": "1",
                "number_of_shards": "5",
                "version": {
                    "created": "2040499"
                }
            }
        },
        "warmers": { }
    }
}    

索引的两个重要配置: number_of_replicas 副本数量(默认1) number_of_shards 分片数量(默认5) 创建索引时自定义副本和分片数量:

newindex1 PUT

{
  "settings": {
    "index": {
      "number_of_replicas": "3",
      "number_of_shards": "3"
    }
  }
}

二、创建类型type

在索引newindex中创建名为newtype的类型:

newindex/newtype/_mapping PUT

{
  "newtype": {}
}

再查看索引newindex,结果如下:

{
    "newindex": {
        "aliases": { },
        "mappings": {
            "newtype": { }
        },
        "settings": {
            "index": {
                "creation_date": "1491980889980",
                "uuid": "DvFfvO0JQ46Bbb0u64rgsw",
                "number_of_replicas": "1",
                "number_of_shards": "5",
                "version": {
                "created": "2040499"
                }
            }
        },
        "warmers": { }
    }
}

发现"mappings"(映射)中多了newtype。

每个类型(type)拥有自己的映射(mapping)或者模式定义(schema definition),一个映射定义了字段,每个字段的数据类型,以及字段被Elasticsearch处理的方式。

新增一个定义映射的类型newtype1:

newindex/newtype1/_mapping PUT

{
  "newtype1": {
    "properties": {
      "id": {
        "type": "long"
      },
      "name": {
        "type": "string",
        "index": "not_analyzed"
      },
      "birth": {
        "type": "date"
      }
    }
  }
}

查看新创建的newtype1的映射:

newindex/_mapping/newtype1 GET

{
    "newindex": {
        "mappings": {
            "newtype1": {
                "properties": {
                    "birth": {
                        "type": "date",
                        "format": "strict_date_optional_time||epoch_millis"
                    },
                    "id": {
                        "type": "long"
                    },
                    "name": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }
        }
    }
}

三、索引文档

向es中添加一个文档:

newindex/newtype1/1 PUT

{
    "id": 1,
    "name": "张三",
    "birth": "2017-01-02"
}

返回结果如下,添加成功:

{
    "_index": "newindex",
    "_type": "newtype1",
    "_id": "1",
    "_version": 1,
    "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
    },
    "created": true
}

查看文档:

newindex/newtype1/1 GET

{
    "_index": "newindex",
    "_type": "newtype1",
    "_id": "1",
    "_version": 1,
    "found": true,
    "_source": {
        "id": 1,
        "name": "张三",
        "birth": "2017-01-02"
    }
}

创建索引、类型,添加文档可以通过一条指令完成:

myindex/mytype/1 PUT
{
"id": 1,
"name": "张三",
"birth": "2017-01-02"
}

Elasticsearch检测索引、类型不存在时会自动创建,自动创建索引由配置项action.auto_create_index控制,默认开启为true

四、动态映射

如果上面执行操作前,ES中没有myindex这个索引,那么默认会直接创建这个索引;并且type字段也会自动创建。也就是说,ES并不需要像传统的数据库事先定义表的结构。每个索引中的类型都有一个mapping映射,这个映射是动态生成的,因此当增加新的字段时,会自动增加mapping的设置。

通过在配置文件中设置action.auto_create_indexfalse,可以关闭自动创建index这个功能。 自动创建索引功能,也可以设置黑名单或者白名单,比如: 设置action.auto_create_index+aaa*,-bbb*,'+'号意味着允许创建aaa开头的索引,'-'号意味着不允许创建bbb开头的索引。

通过设置dynamic控制动态映射,可选值:

  • true:自动添加字段(默认)
  • false:忽略字段
  • strict:当遇到未知字段时抛出异常

向索引myindex中添加类型strict_type:

myindex/strict_type/_mapping PUT

{
  "strict_type": {
    "dynamic": "strict",
    "properties": {
      "title": {
        "type": "string"
      },
      "stash": {
        "type": "object",
        "dynamic": true
      }
    }
  }
}

将 strict_type 的动态映射设置为了strict,意味着如果向 myindex/strict_type 中添加文档时,如果文档中含有除 title 和 stash 的其他字段时,会抛出异常。测试一下:

myindex/strict_type/1 PUT

{
  "title": "加一个新字段content",
  "content": "未知字段会抛出异常"
}

结果如下:

{
    "error": {
    "root_cause": [
        {
            "type": "strict_dynamic_mapping_exception",
            "reason": "mapping set to strict, dynamic introduction of [content] within [strict_type] is not allowed"
        }
    ],
    "type": "strict_dynamic_mapping_exception",
    "reason": "mapping set to strict, dynamic introduction of [content] within [strict_type] is not allowed"
    },
    "status": 400
}

但是我们在字段 stash 中将dynamic设置为了true,意味着在 stash 对象内可以新增字段,测试一下:

myindex/strict_type/2 PUT

{
  "title": "在stash中加一个新字段content",
  "stash": {
    "content": "这下可以加进来了"
  }
}

结果添加成功:

{
    "_index": "myindex",
    "_type": "strict_type",
    "_id": "2",
    "_version": 1,
    "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
    },
    "created": true
}

五、自定义动态映射

使用dynamic_templates,可以完全控制新字段的映射,可以通过设置字段名或数据类型等应用一个完全不同的映射。

向索引 myindex 中添加一个自定义动态映射的类型 my_dynamic_type :

myindex/my_dynamic_type/_mapping PUT

{
  "my_dynamic_type": {
    "dynamic_templates": [
      {
        "ord": {
          "match": "*_ord",
          "match_mapping_type": "string",
          "mapping": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      },
      {
        "date": {
          "match": "date_*",
          "match_mapping_type": "string",
          "mapping": {
            "type": "date",
            "ignore_malformed": true
          }
        }
      }
    ]
  }
}

my_dynamic_type 的映射使用了动态模板,在动态模板dynamic_templates中:

  • 定义了一个名为ord的模板,这个模板匹配所有以 _ord 结尾("match": "*_ord")字符串类型("match_mapping_type": "string")的字段,将此类字段类型映射为字符串并索引的时候不做解析("mapping": {"type": "string","index": "not_analyzed"}

  • 定义了一个名为date的模板,这个模板匹配所有以 date_开头("match": "date_*")字符串类型("match_mapping_type": "string")的字段,将此类字段类型映射为日期类型,并且忽略不能格式化为日期的值("mapping": {"type": "date","ignore_malformed": true}

看下效果:

myindex/my_dynamic_type/1 PUT

{
  "id": 1,
  "name": "张三",
  "date_birth": "20170923",
  "name_ord": "张三"
}

插入文档后查看 my_dynamic_type 的映射:

myindex/_mappping/my_dynamic_type GET

{
    "myindex": {
        "mappings": {
            "my_dynamic_type": {
                "dynamic_templates": [ { "ord": { "mapping": { "type": "string","index": "not_analyzed"},"match": "*_ord","match_mapping_type": "string"}},{ "date": { "mapping": { "type": "date","ignore_malformed": true},"match": "date_*","match_mapping_type": "string"}}],
                "properties": {
                    "date_birth": {
                        "type": "date",
                        "ignore_malformed": true,
                        "format": "strict_date_optional_time||epoch_millis"
                    },
                    "id": {
                        "type": "long"
                    },
                    "name": {
                        "type": "string"
                    },
                    "name_ord": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }
        }
    }
}

可以看到properties中已经将name_ord字段映射为字符串类型,并不做解析;date_birth也映射为了日期类型,再插入一个文档:

myindex/my_dynamic_type/2 PUT

{
  "id": 2,
  "name": "李四",
  "date_birth": "未知",
  "name_ord": "李四"
}

插入成功,date_birth字段也可以接受不能被格式化为日期的值。

关于动态映射更多配置语法请参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/dynamic-templates.html

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/mapping.html

© 著作权归作者所有

共有 人打赏支持
howsweet
粉丝 4
博文 7
码字总数 6036
作品 0
济南
程序员
当ES赶超Redis,这份ES进修攻略不容错过!

从4月DB-Engines最新发布的全球数据库排名中,我们赫然发现ElasticSearch逆袭超越了Redis,从原先的第9名上升至第8名,而Redis则落后一名,排在了其后。 事实上,这场逆袭并不算太让人意外。...

DBAplus社群 ⋅ 04/15 ⋅ 0

Centos6搭建elk系统,监控IIS日志

**所需程序: 服务器端:java、elasticsearch、kikbana 客 户 端:IIS、logstash** 一、服务器端(192.168.10.46)操作: 先建立一个ELK专门的目录: [root@Cent65 ~]mkdir /elk/ 上传到elk...

D杀手D ⋅ 04/24 ⋅ 0

Elasticsearch中文分词研究

一、ES分析器简介 ES是一个实时搜索与数据分析引擎,为了完成搜索功能,必须对原始数据进行分析、拆解,以建立索引,从而实现搜索功能; ES对数据分析、拆解过程如下: 首先,将一块文本分成...

zhaipengfei1231 ⋅ 04/18 ⋅ 0

快速上手 Elasticsearch 的几个建议

相信不少同学都听说过 Elasticsearch,作为目前最流行的搜索引擎实现方案,越来越多的公司在自己的架构中引入,而其应用场景也从搜索引擎扩展到了日志存储分析、大数据分析领域,本文尝试给初...

rockybean ⋅ 05/21 ⋅ 0

logstash、elasticsearch、kibana搭建日志平台

1、下载logstash a、官方下载地址:https://www.elastic.co/downloads/logstash b、解压:tar -xzvf logstash-5.1.1.tar.gz c、设置用户测试的配置文件:vim logstatsh_test.conf,编辑内容如...

binhu ⋅ 05/23 ⋅ 0

Elastic Search学习笔记1——安装elasticsearch2.4.6

Elastic Search 简介 1.基于Apache Lucene的开源搜索引擎 2.采用Java编写 RESTful API风格 3.较容易的横向扩展 应用场景 1.海量数据分析引擎 2.数据搜索引擎 3.数据仓库 官网 https://www.el...

晨猫 ⋅ 03/09 ⋅ 0

elasticsearch-head 安装介绍

elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。elasticsearch-head 插件的安装在 Linux 和 Windows 没什么区别,安装之前确保当前系...

BeckJin ⋅ 05/19 ⋅ 0

Docker下ELK三部曲之三:K8S上的ELK和应用日志上报

本章是《Docker下ELK三部曲》系列的终篇,前面章节已经详述了ELK环境的搭建以及如何制作自动上报日志的应用镜像,今天我们把ELK和web应用发布到K8S环境下,模拟多个后台server同时上报日志的...

boling_cavalry ⋅ 04/30 ⋅ 0

基于Docker部署ELK (Elasticsearch, Logstash, Kibana)集中日志处理平台,及在Spring Boot应用

当我们还是单体部署我们的Spring Boot项目的时候,日志通常都是放在我们的Linux服务器目录,使用简单的Spring Boot已经包含的Logback框架即可实现。当我们基于Docker部署我们的分布式或者集群...

ImWiki ⋅ 05/27 ⋅ 0

Docker 部署ELK 日志分析

Docker 部署ELK 日志分析 elk集成镜像包 名字是 sebp/elk 安装 docke、启动 yum install docke service docker start Docker至少得分配3GB的内存;不然得加参数 -e ESMINMEM=128m -e ESMAXM...

yikayi ⋅ 06/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 8分钟前 ⋅ 0

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部