elasticsearch(学习记录-从零开始)
写在前面:
随着公司项目即将上线,定时抢购活动,督促着大家除了业务开发,也要把视线逐渐放到关注性能上。密密麻麻的日志文件信息挑战着人类视觉极限,坐在电脑前的我不知道下一步何去何从,如何是好(瑟瑟发抖)。近,坐在我旁边的大佬,让我看一下es,hbase,还有公司用的mq,准备搞一套日志管理后台。好了,我们一起开始吧~(以下内容,将以本人学习流程展开。理论知识 -> 操作 -> 回归理论)
初识es
es是一个开源的、分布式全文检索引擎,它是用java开发的。说到es,不得不提Lucene,由于Lucene太过于难懂难操作,于是就给Lucene升了级,对外暴露RESTFul风格API提供使用,es诞生。
es可以说是一个分布式nosql数据库,它有着集群分片的概念,它可以近乎实时的存储(默认1s刷新缓存到磁盘,近乎实时,但不是准实时)检索数据。它和我们熟知的关系型数据库也好,非关系型数据库也罢,有着不一样的存在姿态。下面说一下怎么个不一样。
关系型数据库(DataBase)《===》es的索引(index)
数据库表《===》es一个索引下面多种类型(Type)ps:es7.0.0开始移除了TYPE概念
数据库表下的数据由行、列组成《===》es一个类型Type由多个文档和多文件组成
数据库,定义每个表的字段、字段之间关系《===》es通过Mapping定义索引下的Type的字段处理规则
数据库的增删改查《===》es的增PUT/POST、删Delete、改_update、查GET
总结:
es的索引相当于一个数据库,每个索引有一个或者多个分片(shared),每个分片又有多个副本(replica,保证高可用嘛,还可以分摊搜索的压力,可进行搜索操作)。存储在es中的主要实体就是文档,文档就相当于数据库表中的一行记录。文档中有很多字段,每个字段的类型,在文档写入es的时候,自动识别类型,这种机制称之为“动态映射”。es也可以事先定义好映射,比如定义好文档各个字段及其类型(推荐),这种机制称为“静态映射”。每个文档存储在一个索引中(想象成数据存在数据库中),es为每一个文档自动生成标识符(想象自增主键)和文档类型。文档又有着对应文档类型的标识符,着就意味着一个索引中,两个不同类型的文档可以有相同的标识符。
经过一番了解,觉得es的分片概念,让坐在电脑前昏昏欲睡的我,又打起精神。当有大量的文档数据时,内存限制、硬盘能力、cpu处理能力限制,没办法足够快速响应,一个节点不能够呀。分片,把数据分为较小的称为分片,每个分片可以放在不同的服务器上(每个分片都是一个独立的Apache Lucene索引)。因此数据可以在集群的节点中传播。当你要查询的索引,分布在不同的分片上时,或者说是不同机器上时,es会把查询发送给每个与此次查询有关的分片,并将结果合并到一起。
说白点,es完成的就是对于搜索PB级的文档数据,和每秒百计的搜索请求,提供了一个高效能的分布式解决方案。
了解到这里,我也是一脸懵逼,不知所措。实践是检验真理的标准,邓小平爷爷很早就告诉过我们。来吧~让暴风雨来的更猛烈些吧~于是乎我去安装es服务,集成到我的价值百亿的项目中玩一下先(坏笑脸)。
操作:
准备工作:安装es、head插件。head提供了友好的视觉效果去使用es。安装head插件,要配置好node和grunt。
准备妥当,访问默认端口号localhost:9100
看来是可以了,看似可以开始把玩了.......
但是....ps:es-head链接es,在elasticsearch.yml记得添加http.cors.enabled: true
http.cors.allow-origin: "*"。显示如下,链接成功。
继续把玩........新建索引,默认分片数5,副本1。分片数一旦确认提交,不可再改,副本则却可以灵活调整。
创建了个索引,查看一下状态。mappings栏为空呀~说明我们创建方式是非结构化的。想想之前提到的mapping。
搞点事情吧~去改变它一下。创建结构化索引:
当然啦,也可以通过请求创建索引。我这里指定mapping和分片、副本数,如下。指定include_type_name=true。
看样是可以了~继续。接下来就搞一下es的增删改查......
es是以RESTFul风格命名,API格式如下:
es7.0.0及其之后:http://ip:端口/索引/_doc/文档id
以前:http://ip:端口/索引/类型/文档id
http请求常用动作有:GET/PUT/POST/DELETE
增:
来吧~用刚刚创建的索引,创建一个文档数据,使用http的put方法,拼好地址:
http://localhost:9200/demo/_doc/测试数据
成功插入一条数据,该数据可以查看。读者也可以尝试,不指定文档id,会自动生成一个文档id。
删文档:
一样的,我们来拼下url:http://localhost:9200/demo/_doc/测试数据
删索引:
http://localhost:9200/test相关文章