第一篇:初识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. 从SQL Server数据库转到Oracle数据库的数据脚本处理

    在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的 ...

  2. Python登录页面及

    写一段代码的流程,先用中文写出流程 #解释器 #编码 #登录,三次登录失败,锁定账户 #文件里保存用户信息 用户名|密码|登录次数 用户名|密码|登录次数 读取内容,r: 文件内容读进内存,read( ...

  3. SQL Server中INNER JOIN与子查询IN的性能测试

    这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...

  4. 受够了if (ModelState.IsValid)?ActionFitlter也是一路的坑啊!

    这篇博客真是干货,干得估计还有点“磕牙”,所以还提供视频和代码.但基础稍弱的同学,怕还是得自行补充一些基础知识——就一篇文章,确实没办法面面俱到. 视频和代码下载:Demo - 百度云盘 · 一起帮 ...

  5. angular控制器之间的传值

    每个controller都会有自己的scope,所有的scope都是属于 $rootScope的子或者子的子... 那么问题就好解决了,通过 $rootScope.$broadcast 广播的事件每个 ...

  6. Spring框架学习1

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

  7. CopyOnWriteArrayList实现原理及源码分析

    CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可 ...

  8. B507实验室打印机连接方法

    一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...

  9. EntityFramework6.X之概述

    实体框架(EF6.X)是一种对象/关系映射器(O/R Mapping解决方案),一套支持开发面向数据的软件应用技术,采用特定域对象和关系数据形式使用数据,而不必考虑存储这些数据的基础数据库表和列,上层 ...

  10. 利用HTTP-only Cookie缓解XSS之痛

    在Web安全领域,跨站脚本攻击时最为常见的一种攻击形式,也是长久以来的一个老大难问题,而本文将向读者介绍的是一种用以缓解这种压力的技术,即HTTP-only cookie. 我们首先对HTTP-onl ...