什么是Elasticsearch?
Elasticsearch是建立在Apache Lucene基础之上的搜索引擎。通过隐藏Lucene的复杂性,取而代之的提供一套简单一致的RESTful API。
Elasticsearch不仅仅只是一个全文搜索引擎,可以被下面这样准确的形容:
1. 一个分布式的实时文档存储,每个字段可以被索引与搜索;
2. 一个分布式实时分析搜索引擎;
3. 能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据
安装Elasticsearch
首先需要安装最新的Java版本;之后从elastic官网下载最新版本的Elasticsearch。地址是_elastic.co/downloads/elasticsearch。_
一个Elasticsearch请求组成
curl -X
被<>标记的部件:
VERB
适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD
或者 `DELETE`。
PROTOCOL
http
或者 https`(如果你在 Elasticsearch 前面有一个 `https
代理)
HOST
Elasticsearch 集群中任意节点的主机名,或者用 localhost
代表本地机器上的节点。
PORT
运行 Elasticsearch HTTP 服务的端口号,默认是 9200
。
PATH
API 的终端路径(例如 _count
将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats
和 _nodes/stats/jvm
。
QUERY_STRING
任意可选的查询字符串参数 (例如 ?pretty
将格式化地输出 JSON 返回值,使其更容易阅读)
BODY
一个 JSON 格式的请求体 (如果请求需要的话)
面向文档
Elasticsearch是面向文档的,意味着她存储整个对象或文档。在Elasticsearch中,对文档进行索引,检索,排序和过滤,而不是对行列数据。Elasticsearch使用JavaScript Object Notation或JSON作为文档的序列化格式。
一个Elasticsearch集群可以包含多个索引,相应的每个索引可以包含多个类型。不同类型存储着多个文档,每个文档又有多个属性。
Elasticsearch与关系数据库对照
一个索引类似于关系数据库中个一个数据库,是一个存储关系型文档的地方;
一个文档类似于关系数据库中的一个表;
关系数据库通过增加索引(比如B-tree)索引到指定列上,以便提升数据检索速度。Elasticsearch和Lucene使用一个叫做倒排索引的结构来达到相同的目的。
索引文档
以雇员为例,对于雇员目录,我们将做如下操作:
1. 每个雇员索引一个文档,包含该雇员所有信息。
2. 每个文档都是employee类型。
3. 该类型位于索引megacorp内。
4. 该索引保存在Elasticsearch集群中。
可以通过一条命令完成所有这些动作:
PUT /megacorp/employee/1 { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] }
注意,路径 /megacorp/employee/1
包含了三部分的信息:
megacorp 索引名称
employee 类型名称
1 特定雇员的ID
检索文档
GET /megacorp/employee/1
将 HTTP 命令由 PUT
改为 GET
可以用来检索文档,同样的,可以使用 DELETE
命令来删除文档,以及使用 HEAD
指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT
。