Easticsearch通信方式_API
目录
返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html
1.Elasticsearch概念
a. Elasticsearch是一个基于Lucene的开源搜索引擎,无论是在开源还是专有领域,Lunce被认为是迄今为止最先进、性能最好、功能最全的搜索引擎库,但是Lucene只是一个库,想要使用它,您必须使用Java来作为开发语言并将其直接继承到你的应用中,更糟糕的是Lucene非常复杂,你需要深入了解检索的相关只是来理解它是如何工作的。
b. Elasticsearch也使用Java开发并且使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而使其全文检索变得简单,不过Elasticsearch不仅仅是Lucene和全文检索,请看下面的描述:
b.1 分布式的实时文件存储,每个字段都被索引并且可被搜索
b.2 分布式的实时分析搜索引擎
b.3 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
c. 而且这些功能都被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互(这篇文章说的就是这点)。
d. lucene的简单学习过程请参考:http://www.cnblogs.com/hanyinglong/p/5387816.html
e.Elasticsearch学习文档:http://es.xiaoleilu.com/
2.Elasticsearch通信方式
a. 在第一篇文章中我们对Elasticsearch已经有了简单的了解并且在Linux下面配置访问成功了,如果大家没有配置,请参考第一篇文章进行配置并且了解。
b. 那么当我们配置完成之后需要干什么呢?当然是对Elasticsearch进行操作了(增删改查),但是在操作之前,我们是不是先要知道如何与Elasticsearch进行通信呢,于Elasticsearch通信的方式非常多,我们可以通过简单的RESTful API、各种语言的客户端和命令行与之通信,在本博客中我们使用Java、.NET客户端和命令行进行通信说明,下面我会阐述这三种方式。
c. 简单说明一下Elasticsearch的集群和节点的概念
c.1 节点(node)是Elasticsearch运行的实例。
c.2 集群就是一组有着同样cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能,当然一个节点也可以是一个集群。
c.3 您最好找一个合适的名字来替代cluster.name的默认值,比如您自己的名字,这样就可以防止一个新启动的节点加入到相同网络中的另一个同名的集群中。
c.4 可以通过修改config/目录下的elasticsearch.yml文件,然后重启Elasticsearch来替换节点名称,当Elasticsearch在前台运行的时候,可以使用ctrl+c快捷键终止,或者你也可以调用shutdown API来关闭:
curl -XPOST 'http://192.168.37.133:9200/_shutdown'
d. 关于集群后面我会对其进行再次的说明,我对Elasticsearch已经做了集群,但是配置方法研究的还不是很明白,后面研究明白了会给大家分享出来。
e.Elasticsearch学习:https://www.elastic.co/guide/index.html
3. 基于Http协议,以JSON为数据交互格式的RESTful API
a. 编程中的大部分语言都可以使用RESTful API,通过9200端口于Elasticsearch进行通信,你可以使用你拿手的技术来用,甚至Elasticsearch可以通过curl命令与Elasticsearch通信。
b. 使用curl向Elastic发出的请求的组成部分与其他普通的Http请求时一样的,格式如下:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>'-d'<BODY>'
b.1 VERB HTTP方法:GET、POST、PUT、HEAD、DELETE
b.2 PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
b.3 HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,则为:localhost、127.0.0.1
b.4 PROT Elasticsearch Http服务所在的端口,默认为9200
b.5 PATH API路径(例如_count将返回集群中文档的数量),Path可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
b.6 QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
b.7 BODY 一个JSON格式的请求主体。
c.上面我们简单说了一下使用curl的格式,下来简单的使用一下这个命令(首先在linux下找到安装的Elasticsearch,启动(./bin/elasticsearch)),命令如图所示:

c.1 上面的命令为发送请求的命令,下面的命令为发送请求之后响应的命令
c.2 发送请求之后,Elasticsearch会返回一个类似于200 OK的HTTP状态码和JSON格式的响应主题,如上图返回的响应信息所示:
c.3 但是我们在这里发现我们没有看到HTTP表头呢?那是因为在curl里面要显示,必须在curl命令后面跟 -i参数,如下图所示:

d.后面会专门写博客来使用curl操作Elasticsearch。
4. Java API
a. Elasticsearch为Java用户提供了两种内置的客户端:
a.1 节点客户端(node client):节点客户端以无数据节点(node data node)身份加入集群,换言之,他自己不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发请求到对应的节点上。
a.2 传输客户端(transport client):更轻量的客户端,能够发送请求到远程集群,它自己不加入集群,只是简单转发请求给集群中的节点。
b. 两个Java客户端都通过9300端口和集群交互,使用Elasticsearch传输协议(ELasticsearch Transport Protocol),集群中的节点之间也是通过9300端口进行通信,如果此端口未开放,你的节点将不能组成集群。
c. Java客户端所在的Elasticsarch必须与集群中其它的节点一致,否则可能无法互相识别。
d. 详细信息请参考:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html
e. 后面会专门写一篇博客来使用Java操作ELasticsearch。
5. .NET API
a. .NET API和Java API基本一样,也是含有开源的组件。
b. 详细信息请参考:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/index.html
c. 后面会专门写一篇博客来使用.NET操作ELasticsearch。
通过这篇文章,我们了解了ELasticsearch是如何进行通讯的,那么接下来我们将会说一下Elasticsearch索引以及使用CURL创建增删改索引。
每天一点点都是进步
如果文章哪里存在问题,欢迎大家指出来,我会在第一时间修改。
Easticsearch通信方式_API的更多相关文章
- Open Source
资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...
- Elasticsearch配置详解、文档元数据
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...
- 全文检索学习历程目录结构(Lucene、ElasticSearch)
1.目录 (1) Apache Lucene(全文检索引擎)—创建索引:http://www.cnblogs.com/hanyinglong/p/5387816.html (2) Apache Luc ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- activemq的几种基本通信方式总结
简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍
<ignore_js_op> 1)NameNode.DataNode和Client NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群 ...
- activemq的两种基本通信方式的使用及总结
简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...
- apple watch 与 iphone 之间的通信方式
apple watch 与 iphone 之间的通信方式:通过watchkit WatchKit应用扩展都提供一个名为WKInterfaceController的子类来管理相应的界面. 启动watch ...
随机推荐
- php后台修改人员表信息
显示info人员表里所有内容 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- Session for SSRS Report of Microsoft Dynamics AX
Session for SSRS Report of Microsoft Dynamics AX 版权声明:本文为博主原创文章,未经博主允许不得转载. Contract •A data contrac ...
- 《C#高级编程》学习总结之LINQ
一.标准的查询操作符 标准查询操作符 说明 Where OfType<TResult> 筛选操作符定义了返回元素的条件. Select SelectMany 投射操作符用于把对象转换为另一 ...
- 基于Bootstrap里面的Button dropdown打造自定义select
最近工作非常的忙,在对一个系统进行改版.项目后台是MVC1.0开发的,但是前端部分已经改过几个版本,而已之前的设计师很强大,又做设计又做前端开发.而已很时尚和前沿,使用了一直都很热门的Bootstra ...
- 修改USB固件库的Customer_HID例程
我用的是神州三号开发板子,板子的USB模块原理图为: 配置端口G的11号引脚为usb的使能引脚,按理来说应该是开漏输出的(看了很多的修改代码都是这个模式),不过就是不能使能usb,只能配置成推挽的才行 ...
- MySQL中有关TIMESTAMP和DATETIME的总结
一.MySQL中如何表示当前时间? 其实,表达方式还是蛮多的,汇总如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() LOCALTIME LOCALTIME ...
- 构建自己的PHP框架--定义ORM的接口
在上一篇博客中,我们抽象出了Controller的基类,实现了页面的渲染和返回JSON字符串的功能. 那作为一个框架,我们现在还缺少什么?是的,大家应该已经注意到了,我们在这之前从来没有连接过数据库, ...
- objective-c 语法快速过(3)
oc 里的匿名对象 oc 这里,很少用到,因为并不适用于oc的内存管理,只是面试笔试也许出现,要求能看懂,不要在项目里这样写,因为写匿名对象,会造成内存泄露 #import <Foundatio ...
- Cesium原理篇:1最长的一帧之渲染调度
原计划开始着手地形系列,但发现如果想要从逻辑上彻底了解地形相关的细节,那还是需要了解Cesium的数据调度过程,这样才能更好的理解,因此,打算先整体介绍一下Cesium的渲染过程,然后在过渡到其中的两 ...
- 利用js2image把代码压缩成圣诞树
马上圣诞节了,作为一名程序猿,如何体现自己独特的过节风格,如何在朋友圈发一张专属自己的祝福照片我觉得很有必要,你们说是不是. 谈到圣诞节,话说程序猿和圣诞之间的关系还有这么一个笑话: Q:程序员为什么 ...