这周,刚接手了同事那边的工作,项目里需要用到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. LeetCode(165) Compare Version Numbers

    题目 Compare two version numbers version1 and version2. If version1 > version2 return 1, if version ...

  2. LeetCode(268) Missing Number

    题目 Given an array containing n distinct numbers taken from 0, 1, 2, -, n, find the one that is missi ...

  3. WPF使用异步+绑定的方式处理大数据量

    WPF的优势在于界面处理,即使是这样,在面对大数据量的时候也免不了界面假死,同一个线程里处理界面跟大数据量,这是不可避免的.解决办法还是有的,可以使用分页加载,虚拟加载,动态加载,增加条件限制... ...

  4. LA 3667 Ruler 搜索

    题意: 给出\(n\)个长度,要设计一个有\(m\)个刻度的刻度尺,刻度尺的刻度从\(0\)开始. 使得任意一个长度都能被该刻度尺度量出来. 首先要使\(m\)最小,在\(m\)最小的前提下尺子的长度 ...

  5. webdriver高级应用- 操作富文本框

    富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. ...

  6. Python 爬取图书图片和地址

    #-*- coding:utf-8 -*- import xlwt import urllib import re def getHtml(url): page = urllib.urlopen(ur ...

  7. mongodb系统出错。 发生系统错误 1067。 进程意外终止。

    MongoDB安装目录\data\将此文件夹下的mongod.lock删除 mongod.exe --config E:\ruanjian\MongoDB\mongod.cfg --remove mo ...

  8. 101 Hack 50

    101 Hack 50 闲来无事.也静不下心,打个代码压压压惊 Hard Questions by kevinsogo Vincent and Catherine are classmates who ...

  9. oracle主键自增长

    这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null primary key, nam ...

  10. API经济时代的思考(转载目的:为之后写API-first模式的生命周期治理做准备)

    原文地址:API经济时代的思考    感觉这篇博客还不错,个人赞同其大部分的内容,借鉴参考一下,懒得自己写了(关键是不一定能轻松写得更好,嘿嘿,偷懒啦) 接下来会写关于API经济的概念下,如何进行AP ...