第一篇:初识Elasticsearch

Elasticsearch 要求 java8+的环境,推荐使用 Oracle 1.8.0_131版本的JDK。Java JDK的安装此处不做介绍。这里我们使用的5.4.2版本的Elasticsearch。
从elastic网站www.elastic.co/downloads下载,网站上有对于任何一个版本你都可以选择.zip或.tar的压缩文件,DEB或RPM格式的安装包。简单办法是使用tar文件。将tar文件解压到指定文件夹,在文件夹下执行下面命令启动Elasticsearch:
cd elasticsearch-5.4.2/bin
./elasticsearch
如果看到以下格式的信息说明启动成功了:
 
我们可以在命令行启动Elasticsearch时修改集群和节点的名称:
./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name
默认情况下Elasticsearch使用9200端口对外提供REST API服务,必要情况下爱可以修改该端口号。
 
现在我们已经启动一个Elasticsearch节点(集群),下一步就是理解怎么和它通讯。Elasticsearch提供一个非常全面而且强大的REST API,你可以使用API和你的集群交互。通过API可以完成以下工作:
  • 检查集群、节点和索引健康状态、统计信息。
  • 管理你的集群、节点和索引数据及元数据。
  • 对索引执行CRUD(创建、读取、更新和删除)和搜索操作。
  • 执行高级搜索操作(例如分页、排序、过滤、脚本处理、聚合等等)。

如果我们想对集群进行一个基础的健康检查,查看集群正在干什么,我们可以curl查看(你可以使用任何一个可以发起HTTP/REST请求的工具)。假定我们一直在相同的节点上穹顶Elasticsearch,并且打开了另一个命令行窗口。
检查集群健康状态,我们使用_cat API。你可以在Kibana的console页面运行以下命令:
GET /_cat/health?v
响应结果如图右侧:
我们可以看到名为elasticsearch的集群已经启动并且但是状态为yellow(正常状态为green,这里因为本地只搭建了单节点环境,数据没有副本)。
我们请求集群健康信息时,会获取green、yellow、或red三者中的一种状态。Green表示一切正常(集群功能完全正常),Yellow表示所有的数据都是可用的但是一些副本没有分配(集群功能完全正常),Red表示一些数据因为某种原因无法正常使用。注意,即使集群的状态为Red,它的部分功能还是可以使用的(i.e. 它会从可得到的资源中继续提供搜索请求),但是你应该在数据损失之前你尽快修复问题。
从上面的响应结果中,我们还可以看到集群中一共只有1个节点,具有1个碎片。这是因为我们还没有存放数据。,注意,我们使用的是默认的系群名称(elasticsearch),并且Elasticsearch使用的是单播网络,所以如果在一台机器上启动多个节点是可以被发现的,这样的话你就可以在上面的响应信息中看到更多的节点。
我们还可以使用下面的请求获取节点列表:
GET /_cat/nodes?v
这里我们可以看到我们一个节点名为“J7JVnD6”,这是我们集群中唯一的一个节点。
 

现在我们来看一眼我们的索引:
执行 GET /_cat/indices?v 响应如下:
从响应结果可以看到我们有一个名为.kiban的索引,大小为3.1kb,这是因为我们这里使用的kibana,自动创建了一个索引。

现在我们创建一个名为“customer”的索引,然后再次列出所有索引:
PUT /customer?pretty GET /_cat/indices?v
可以看到执行创建索引请求时,响应返回了一个json格式的数据。
再次列出所有索引时多了一个名为“customer”的索引,并且其有5个碎片和1个副本(默认),包含0个文件。
你可能也看到“customer”索引的状态也是Yellow状态,回想一下之前的讨论,黄色意味着一些副本还没有分配。这个索引发生的原因是由于Elasticsearch默认创建了这个索引的一个副本。因为我们现在只有一个节点在运行,因此无法分配一个副本(用于高可用性),直到另一个节点连接到集群的时候。一旦该副本被分配到第二个节点上,该索引的健康状态将变为绿色。

我们现在put一些数据到customer索引中,请记住,为了索引文档,必须告诉Elasticsearch数据在该索引中的类型:
我们来索引一个简单类型为"external",ID为1的customer文件到customer索引中去;格式如下:
PUT /customer/external/1?pretty { "name": "John Doe" }
从上面的响应结果可以看到一个新的customer文件被成功的创建到customer索引中,并且类型为external。这个文件还有一个创建时指定的内部ID为1。
Elasticsearch不要求在索引文件之前显示的创建一个索引,在上面的例子中如果customer索引不存在的话Elasticsearch会自动创建customer索引。下面我们来检索一下刚才索引的文件:
GET /customer/external/1?pretty
从上面的响应结果可以看到一个found字段,该字段为true表示我们找到了找到了索引为customer,类型为external,ID为1的文件。_source字段则返回了完整的我们之前索引的JSON文件。如果我们检索一个不存在的文件,例如检索一个ID为2的文件:
GET /customer/external/2?pretty
会得到如下的响应
 

现在我们删除刚才我们创建的索引,然后再列出所有索引:
DELETE /customer?pretty GET /_cat/indices?v
 
可以看到customer索引已经被成功删除了。

Elasticsearch提供准实时的数据处理和搜索功能。默认情况下,你可以在你的对你的数据执行索引、更新、删除操作之后的一个两个延迟(刷新间隔)之后查到预期的搜索结果。这是跟其他平台最大的不同之处,想SQL查询之类的系统在一个事务完成之后立刻就得得到想要的结果。

我们前面看到了如何索引一个简单的文档,现在来回顾一下这段命令;
PUT /customer/external/1?pretty { "name": "John Doe" }
同样的上面脚本会将文档索引到customer索引中取,类型为external,ID为1,如果我们再用一个不同的文档执行上面的脚本,Elasticsearch会用着个新文档替换已存在ID为1的文档:
PUT /customer/external/1?pretty { "name": "Jane Doe" }
上面将ID为1的文档从“John Doe” 改为“Jane Doe”.如果我们用一个不同的ID,将会索引一个新文档,并且已经在索引中保存的现有文档保持不变。
PUT /customer/external/2?pretty { "name": "Jane Doe" }
上面索引了一个ID为2的新文档。
索引时,ID部分是可选的,如果不指定,Elasticsearch会生成一个随机的ID来索引该文档。这个Elasticsearch生成的实际ID(或前边例子中我们指定的ID)会作为索引API回调的一部分返回。
下面的例子中展示如何不指明ID来索引文件:
POST /customer/external?pretty { "name": "Jane Doe" }
注意:这个例子中,我们使用的是POST动作还不是PUT,因为我们没有指定一个ID。

除了能索引和替换文档之外,我们还能更新文档,注意,实际上Elasticsearch并没有引擎下做就地更新。当我们做一个更新操作时,Elasticsearch删除就文档然后一个快照中索引新文档。
下面的例子展示如何更新我们之前的文档(ID为1),将name字段改为“Jane Doe”;
POST /customer/external/1/_update?pretty { "doc": { "name": "Jane Doe" } }
下面的例子展示如何更新我们之前的文档(ID为1),将name字段修改为"Jane Doe",同时添加age字段:
POST /customer/external/1/_update?pretty { "doc": { "name": "Jane Doe", "age": 20 } }
还可以使用简单的脚本来执行更新,下面的例子使用一个脚本吧Age增加5:
POST /customer/external/1/_update?pretty { "script" : "ctx._source.age += 5" }
上面的例子中,ctx._source引用即将更新的源文档。
注意,在撰写本文时,Elasticsearch只支持同时更新一个文档。在将来,Elasticsearch可能会实现通过一个查询条件实现多文档更新功能(就像SQL中UPDATE-WHERE语句一样)。

删除一个文档相对来说很简单,下面的例子展示如何删除之前customer索引中ID为2的文档:
DELETE /customer/external/2?pretty
通过查看API中的Delete一节,已删除匹配特定查询的所有文档,值得注意的是,直接删除整个索引比删除索引下的所有文档更简单有效。

除了索引、更新和删除删除单个文档之外,Elasticsearch还提供了使用_bulk API 批量执行上述操作的功能。这个功能非常重要,因为它提供了一种非常高效的机制来尽可能快地执行多个操作,尽可能少地进行网络传输。
作为一个简单的例子,下面的脚本可以在一个批量操作中索引两个文档(ID 1 - John Doe and ID 2 - Jane Doe):
POST /customer/external/_bulk?pretty {"index":{"_id":"1"}} {"name": "John Doe" } {"index":{"_id":"2"}} {"name": "Jane Doe" }
下面的例子在一个批量操作中更新了第一个文档然后删除了第二个文档:
POST /customer/external/_bulk?pretty {"update":{"_id":"1"}} {"doc": { "name": "John Doe becomes Jane Doe" } } {"delete":{"_id":"2"}}
注意:上面的删除动作中,因为删除动作没有相应的源文档,只需要提供将删除文档的ID即可。
Bulk API 不会因为其中一个操作的失败而失败,不管任何原因导致一个操作失败,都将继续执行后面的操作。当Bulk API返回时,它会提供每一个动作的状态(以同样的顺序送回来),这时你可以检查每个动作是否失败。

ELK-初识Elasticsearch的更多相关文章

  1. ELK stack elasticsearch/logstash/kibana 关系和介绍

    ELK stack elasticsearch 后续简称ES logstack 简称LS kibana 简称K 日志分析利器 elasticsearch 是索引集群系统 logstash 是日志归集集 ...

  2. ELK 安装Elasticsearch

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK栈要安装以下开源组件: Elasticsearch Ki ...

  3. 【ELK学习】初识ElasticSearch

    ES(elasticsearch) 是一个高可扩展的.开源的全文检索和分析引擎,它允许你存储.检索.分析海量数据,以一种快到近乎实时的速度. ES用例场景: 使用ES存储商品目录.清单,提供检索.输入 ...

  4. Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

    日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常 ...

  5. ELK( ElasticSearch+ Logstash+ Kibana)分布式日志系统部署文档

    开始在公司实施的小应用,慢慢完善之~~~~~~~~文档制作 了好作运维同事之间的前期普及.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 软件下载地址: https://www.e ...

  6. elk之elasticsearch(二)

    一.下载安装包:注意版本统一 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.zip wge ...

  7. ELK篇---------elasticsearch集群安装配置

    说明: 本次ELK的基础配置如下: 虚拟机:vmware 11 系统:centos7.2  两台 IP:172.16.1.15/16 一.下载es wget https://download.elas ...

  8. ELK之Elasticsearch、logstash部署及配置

    ElasticSearch是一个搜索引擎,用来搜索.分析.存储日志; Logstash用来采集日志,把日志解析为json格式交给ElasticSearch; Kibana是一个数据可视化组件,把处理后 ...

  9. Elasticsearch系列---初识Elasticsearch

    Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源.分布式.Restful接口的全文搜索引擎,还是一个分布式文档数据库.天生就是分布式.高可用.可 ...

  10. ELK之 elasticsearch ES集群 head安装

    最近项目用到 jenkins  ELK  也在一次重新学习了一次  jenkins 不用说了 玩得就是  插件   +  base---shell ,  ELK  这几年最流得log收集平台,当然不止 ...

随机推荐

  1. HTML基础知识入门

    好的,我们开始吧,打开Eclipse,新建一个项目,就叫做Base吧,基础班的意思.注意哦,要建一个JavaWeb项目.右键,new,Dynamic Web Project,如果出来的菜单项没有,就点 ...

  2. 关于微信小程序的Request请求错误处理

    在学微信小程序的request请求的时候,一开始报“不在以下合法域名列表中,请参考文”的错误,后来又莫名其妙的报“400 Bad Request”错误,经过半天的研究,终于搞定了,把遇到的错误给大家分 ...

  3. AlertDialog中的EditText不能输入

    一.描述 在项目中有碰到使用AlertDialog,给他设置自定义布局,自定义布局中有包含EditText,但是运行起来后发现EditText不能输入文字,没有焦点,一开始还以为是事件拦截掉了,后来试 ...

  4. 通过rpm 安装MYSQL

    1.MYSQL Server端安装: 2.MYSQL client 安装 3.设置MYSQL密码(安装了MySql客户端才可以执行) ' 4.登录MYSQL mysql 的最简单的安装方法啦

  5. Spring框架学习1

    AnonymouL 兴之所至,心之所安;尽其在我,顺其自然 新随笔 管理   Spring框架学习(一)   阅读目录 一. spring概述 核心容器: Spring 上下文: Spring AOP ...

  6. 进军VR虚拟现实-先来全景智慧城市-有梦想的互联网创业者

    随着VR的大火,越来越多的企业开始进军VR行业,不过并不是所有企业进军VR行业都是成功的,那么问题来了,VR虚拟现实行业投资怎么做才能取得成功呢?这是当下很多企业面临的一个问题,VR虚拟现实行业投资也 ...

  7. 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

    5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...

  8. kafka 0.10.2 消息生产者

    package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org ...

  9. 如何编写Hexo主题

    完成一个Hexo的主题其实很简单,和写静态页面差不多,只是内容部分通过Hexo的变量去获取,而且Hexo还内置了一些辅助函数帮你快速方便地完成繁琐的处理. 起步 在写代码之前要先把项目结构搭建好,一个 ...

  10. [Leetcode] Binary tree level order traversal二叉树层次遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...