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 ...
随机推荐
- 使用Emit把Datatable转换为对象集合(List<T>)
Emit生成动态方法部分摘自网上,但是经过修改,加入了对委托的缓存以及类结构的调整,使之调用更简洁方便.大致的思路是:要实现转换datatable到某个指定对象的集合,本质是实现转换一个datarow ...
- 30个你必须记住的CSS选择符
所以你学会了基础的id,类和后代选择符,然后你就一直用它们了吗?如果是这样,你丢失了(css的)巨大的灵活性.在本文中提到的很多选择器属于CSS3规范的一部分,因此,只有在现代浏览器中才可使用. 1. ...
- WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
- 在Eclipse中对包进行增删改查
package com.hanqi.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.R ...
- php相对于java、js几点不太一样的地方
1.PHP 变量作用域 在 PHP 中,可以在脚本的任意位置对变量进行声明. 变量的作用域指的是变量能够被引用/使用的那部分脚本. PHP 有三种不同的变量作用域: local(局部) global( ...
- SQL Server 堆表行存储大小(Record Size)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 堆表行记录存储格式(Heap) 案例分析(Case) 参考文献(References) 二.背 ...
- lua解释执行脚本流程
#include "lua.hpp" #include <iostream> using namespace std; #pragma comment(lib, &qu ...
- ASP.NET MVC之国际化(十一)
前言 在项目中遇到国际化语言的问题是常有的事情,之前在做关于MVC国际化语言时,刚开始打算全部利用AngularJS来实现,但是渐渐发现对于页面Title难以去控制其语言转换,于是对于页面Tiltle ...
- ASP.NET MVC之Unobtrusive Ajax(五)
前言 这一节我们来讲讲Unobtrusive中的Ajax提交,大部分情况下我们是利用JQuery来进行Ajax请求,当然利用JQuery来进行表单Ajax请求也不例外,但是相对于Unobtrusive ...
- android:theme决定AlertDialog的背景颜色
最近遇到一个很奇怪的问题,两个项目弹出的dialog背景颜色不一样,一个是黑色的,一个是白色的,最后发现是AndroidManifest.xml文件里面application指定的android:th ...