你的位置:首页 > Java教程

[Java教程]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文档元数据等信息。

       

    每天一点点都是进步

      如果文章哪里存在问题,欢迎大家指出来,我会在第一时间修改。