目录

  返回目录: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的更多相关文章

  1. Open Source

    资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...

  2. Elasticsearch配置详解、文档元数据

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...

  3. 全文检索学习历程目录结构(Lucene、ElasticSearch)

    1.目录 (1) Apache Lucene(全文检索引擎)—创建索引:http://www.cnblogs.com/hanyinglong/p/5387816.html (2) Apache Luc ...

  4. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

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

    简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...

  6. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

    <ignore_js_op> 1)NameNode.DataNode和Client         NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群 ...

  8. activemq的两种基本通信方式的使用及总结

    简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...

  9. apple watch 与 iphone 之间的通信方式

    apple watch 与 iphone 之间的通信方式:通过watchkit WatchKit应用扩展都提供一个名为WKInterfaceController的子类来管理相应的界面. 启动watch ...

随机推荐

  1. Linux内核目录结构

    arch 包括所有和体系结构相关的核心代码. include 包括编译内核所需要的大部分头文件 init 包含内核的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件 mm ...

  2. TortoiseSVN Clean up 失败的处理方法

    当使用 TortoiseSVN 下载项目失败之后,重新下载之前需要 Clean up,在 TortoiseSVN 中 Clean up 总是失败.   在命令行行中执行 svn cleanup 就成功 ...

  3. 【Win 10应用开发】SplitView控件

    SplitView控件用于呈现分隔视图,简单地说,就是把一个视图分割为两部分,Content属性所表示的为主要视图,而Pane属性设置的视图则可以隐藏,可以折叠和展开. 估计文字是不太容易介绍这个控件 ...

  4. 《ES6基础教程》之 Call 方法和 Apply 方法

    <script type="text/javascript"> // Call方法: // 语法:call(thisObj[,arg1,arg2,...,argN]) ...

  5. File类使用小结

    一.构造函数 File(String pathname):根据参数转换为抽象路径名创建File实例 File(String parent,String filename):根据parent和filen ...

  6. Bootstrap Metronic 学习记录(一)简介

    1.简介 是一个基于Bootstrap 3.x的高级管理控制面板主题.Bootstrap Metronic - 是一个完全响应式管理模板.基于Bootstrap3框架.高度可定制的,易于使用.适合从小 ...

  7. 2012-09-10 23:30 如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题

    那么如何解决HtmlAgilityPack得到的InnerText中有残留的script.样式的问题呢,在google上搜索“HtmlAgilityPack script innerText”找到了s ...

  8. IOS数据存储之NSUserDefaults

    前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...

  9. 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)

    上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...

  10. Android自定义View 画弧形,文字,并增加动画效果

    一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类   B ...