Easticsearch通信方式_API

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文档元数据等信息。

    每天一点点都是进步

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

时间: 2024-08-09 09:27:23

Easticsearch通信方式_API的相关文章

Linux下的进程通信方式(IPC)——管道通信

Unix IPC: 管道.命名管道(FIFO)      管道 1.概念 管道是单向的(半双工).先进先出.无结构的字节流,它把一个进程的输出和另一个进程的输入连接在一起. 写进程在管道的尾端写入数据,读进程在管道的首端读出数据.数据读出后将从管道中移走,其它读进程都不能再读到这些数据. 管道提供了简单的流控制机制.进程试图读一个空管道时,在数据写入管道前,进程将一直阻塞.同样,管道已经满时,进程再试图写管道,在其它进程从管道中读走数据之前,写进程将一直阻塞. 2.管道的特点 (1)单向数据通信

activemq的几种基本通信方式总结

简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activemq是JMS消息通信规范的一个实现.总的来说,消息规范里面定义最常见的几种消息通信模式主要有发布-订阅.点对点这两种.另外,通过结合这些模式的具体应用,我们在处理某些应用场景的时候也衍生出来了一种请求应答的模式.下面,我们针对这几种方式一一讨论一下. 基础流程 在讨论具体方式的时候,我们先看看使用ac

nginx与php的通信方式

记录php慢执行日志(对一些优化较差的网页进行记录,方便网页代码优化)修改php配置文件 vim /usr/local/nginx_php/etc/php-fpm.confslowlog = /tmp/www_slow.logrequest_slowlog_timeout = 5   #设置执行超时时间/秒 php设置多个模块在配置文件中修改sock通信方式即可多个模块不能使用127.0.0.1:9000的通信方式了vim /usr/local/nginx_php/etc/php-fpm.con

黑马程序员_API

------- android培训.java培训.期待与您交流! ---------- ======================API========================================= 看api的步骤: 1.看类的说明.其所属的包以及出现的版本. 2.看其构造函数. 3.看普通的方法.看时注意参数,和返回值类型. Object类 1. private static native void registerNatives (); 见到本地关键字修饰的方法,这个方

进程间的通信方式

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系.# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信.# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手段.# 消息队列( m

进程间的八种通信方式----共享内存是最快的 IPC 方式

1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 2.高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式. 3.有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信. 4.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识

内核空间与用户空间的通信方式

内核空间与用户空间的通信方式 下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象. 1.使用API:这是最常使用的一种方式了 A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中. B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处. C.Copy_from_user()/copy_to_user():主要应用于设备驱动读写函数中,通过系统调用触发. 2.使用proc文件系统:

Hadoop中NameNode、DataNode和Client三者之间的通信方式是什么?怎样进行合作?

一直没有重视三者之间的通信问题,在此整理一下提问:datanode之间有没有交互?Hadoop安装时ssh如何配置? 1.背景知识: 在Hadoop系统中,master/slaves/client的对应关系是:master---namenode:slaves---datanode:client---dfsclient:通信方式简单地讲:client和namenode之间是通过rpc通信:datanode和namenode之间是通过rpc通信:client和datanode之间是通过简单的sock

嵌入式iframe子页面与父页面js通信方式

iframe框架中的页面与主页面之间的通信方式根据iframe中src属性是同域链接还是跨域链接,有明显不同的通信方式,同域下的数据交换和DOM元素互访就简单的多了,而跨域的则需要一些巧妙的方式来实现通信. 一.同域下父子页面的通信 父页面 Parent.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Parent.aspx.cs" Inherits="