ElasticSearch 简介与使用
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。Elastic 的底层用的是 Lucene。如果你想用 Lucene的话必须自己去写接口,而Elastic将这些进行了一层封装,并且提供restful接口,让使用者达到开箱即用。
基本概念
Node 与 Cluster
Elastic 实际上是一个分布式数据库,它可以存储数据,能够让多台服务器协同工作,每个服务器可以运行多个Elastic服务。每一个Elastic服务实例都可以称作一个节点(Node),一组节点就构成了集群(Cluster)。
Index,Type,Document
Elastic中通过索引(Index),类型(Type),文档(Document)三个值来定义了Elastic中存储的数据结构。索引相当于我们在数据库中的库名字,类型相当于表,文档就是实际存储的数据内容。比如一堆书,这个就是“书”索引(Index),按照“武侠”,“技术”等进行分类(Type),每一本书就是实际上存储的数据(Document)。在Elastic中多个文档组成了一个索引,而文档可以通过分类来方便查询。这里的Type实际上是逻辑上的分组。
ES的增删改
ES的增删改查遵循restful的风格,所以在使用在非常方便:
1 |
|
ES的查询
为什么要单独讲讲查询?ElasticSearch,从名字中就可以直接看出,search占据了elastic的很大一部分。很多时候我们使用ES也是主要因为它方便的查询功能,在ES中查询的方式有以下几种:
- 不带条件返回所有索引下的所有文档:
1 | GET localhost:9200/_search?pretty // pretty是将返回的json进行格式化 |
- 根据索引,类型,文档id获取到唯一值:
1 | GET localhost:9200/accounts/person/1 |
- 不带body的查询,轻量搜索
1 | // 返回所有文档中有‘jack’的数据 |
- 带body的条件查询:Query DSL
1 |
|
官方文档提供了一些实例:查询表达式