这周,刚接手了同事那边的工作,项目里需要用到ElasticSeacher。但是,之前从未接触过,因此,看了ES的文档,开始慢慢的知道了一些ES的知识。

一、ES简介:

Elasticsearch是一个基于Lucene的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

因此,Elasticsearch使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索

变得简单。不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:

(1)分布式的实时文件存储,每个字段都被索引并可被搜索

(2)分布式的实时分析搜索引擎

(3)可以扩展到上百台服务器,处理PB级结构化或非结构化数据

二、ES中的几个重要概念
(1)Cluster
         一个集群有一个唯一的名字,默认是“elasticsearch”。这个名字很重要,因为一个node仅仅能加入一个集群。
(2)Node
        默认,node在启动时被随机分配一个名字,当然也可以自定义。可以配置node加入一个指定名字的cluster。每一个节点默认加入名为"elasticsearch"的集群。
        一个集群可以很多节点,也可以只有一个。
(3)Index
         index是具有相似特性的document的集合(类似数据库)。每一个index被一个名字唯一标识(必须小写)。这个名字会在indexing、search、update和delete
         操作中使用。
(4)Type  
       在一个index内,可以定义一个或多个types。Type是对index的划分(完全取决你,类似数据中的表)。
(5)Document
        document是信息被索引的基本单元(类似数据库中行)。在index/type内部,可存储许多ocument。
(6)Shards&Replicas
         ES的index支持分片功能。创建一个index时,你可以设置分片的数量,每个分片本质上是完全独立的“index”,可以被存储到集群中的任意node上。
三、ES与java交互
Elasticsearch为Java用户提供了两种内置客户端:
(1)节点客户端以无数据节点(none data node)身份加入集群,换言之,它自己不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发
        请求到对应的节点上。
(2)这个更轻量的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。
两个Java客户端都通过9300端口与集群交互,使用Elasticsearch传输协议(Elasticsearch Transport Protocol)。集群中的节点之间也通过9300端口进行通信。
如果此端口未开放,你的节点将不能组成集群。
四、通过curl命令与ES交互
我们还可以通过curl命令与ES进行交互,通过这种方式向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

(1)VERB HTTP方法:GETPOSTPUTHEADDELETE

(2)PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)

(3)HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost

(4)PORT Elasticsearch HTTP服务所在的端口,默认为9200

(5)PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm

(6)QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据

(7)BODY 一个JSON格式的请求主体(如果请求需要的话)

举例说明:

为了计算集群中的文档数量,我们可以输入这样的命令:

curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
"query": {
"match_all": {}
}
}

Elasticsearch返回一个类似200 OK的HTTP状态码和JSON格式的响应主体。上面的请求会得到如下的JSON格式的响应主体:

{
"count" : 0,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
}
}

因为,也是刚刚接触ES,只能粗略的理解文档上的意思,具体的查询和插入等操作,在接下来会不断的学习。

 
 

初学ElasticSeacher的更多相关文章

  1. DDD初学指南

    去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...

  2. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  3. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  4. 初学Vue2.0--基础篇

    概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...

  5. 初学Python

    初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔&quo ...

  6. Javascript初学篇章_5(对象)

    对象 Javascript是一种面向对象的语言,因此可以使用面向对象的思想来进行javascript程序设计对象就是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体.举个例子,一只猫是个对象, ...

  7. 初学Objective-C语言需要了解的星星点点

             其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...

  8. matlab初学之句柄

    文章出处:http://www.cnblogs.com/CBDoctor/archive/2012/04/06/2434072.html 在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每 ...

  9. 初学HTML5、初入前端

    学习HTML5是一个漫长的过程,当中会遇到很多技术与心态上的变化.刚开始学习,我们不能发力过猛,需要一个相对稳定的状态去面对.多关注一些自己感兴趣的网站和技术知识,建立自己的信心与好奇心,为以后的学习 ...

随机推荐

  1. Python并发编程之多进程(实战)

    一.multiprocessing和Process multiprocessing提供了支持子进程.通信和数据共享.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件 创建 ...

  2. Java观察者模式(Observer)

    一.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己.主要应用在java的AWT事件机制 ...

  3. MySQL安装与配置介绍

    MySQl介绍 官方站点:http://www.mysql.com/ MySQL是一个开放源码的小型关联式数据库管理系统.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速 ...

  4. Python之多线程与多进程(二)

    多进程 上一章:Python多线程与多进程(一) 由于GIL的存在,Python的多线程并没有实现真正的并行.因此,一些问题使用threading模块并不能解决 不过Python为并行提供了一个替代方 ...

  5. JAVA-基础(三)

    Character 类型字符(Character)是围绕字符型(char)的一个简单的包装器.字符(Character)的构造函数如下:Character(char ch)这里ch指定了被创建的字符( ...

  6. LSTM block和cell区别

    LSTM的结构中每个时刻的隐层包含了多个memory blocks(一般我们采用一个block),每个block包含了包含一个Cell(有多个memory cell组成)和三个gate,一个基础的结构 ...

  7. webdriver高级应用- 禁止Chrome浏览器的PDF和Flash插件

    #encoding=utf-8 from selenium import webdriver # 导入Options类 from selenium.webdriver.chrome.options i ...

  8. Django Rest Framework 教程及API向导

    Django Rest Framework 教程及API向导. 一.请求(Request)REST_FRAMEWORK 中的 Request 扩展了标准的HttpRequest,为 REST_FRAM ...

  9. 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)

    题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...

  10. python - opencv 的一些小技巧备忘

    python - opencv 的一些小技巧备忘 使用python-opencv来处理图像时,可以像matlab一样,将一幅图像看成一个矩阵,进行矢量操作,以加快代码运行速度. 下面记录几个常用的操作 ...