Elasticsearch一款基于Apache Lucene™开源搜索引擎,其核心是迄今为止最先进、性能最好的、功能最全的搜索引擎库Lucene。Elasticsearch使用简单,具有非常强大的全文搜索功能:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
ElasticSearch中使用到的概念
准实时
Elasticsearch是一个准实时系统:一个文档从存储到它能够被检索只有一个很短的延迟(通常情况下为一秒)。
集群(Cluster)
为所有数据提供存储和检索等服务的结点(服务器)集合。默认的名字为“elasticsearch”,结点(服务器)也依据名字被指定要加入哪个集群。
结点(Node)
作为集群的一部分,为数据提供存储和检索服务的一台服务器。
索引(Index)
索引的概念类似于关系数据库中的数据库,是相关文档存储的地方。相应的,“索引一个文档”表示把一个文档存储在某个索引中。
类型(Type)
索引中文档的逻辑分类,类似于关系数据库中的表。
Elasticsearch 6.0.0.已经不支持在一个索引中建立多个类型,在以后版本中会移除类型这一个概念。
文档(Document)
一条完整的记录,类似于关系数据库中的元组。
域(Fields)
类似于关系数据库中的属性。
倒排索引
Elasticsearch会为文档中的每个字段都建立倒排索引,这是它实现高效搜索的基础之一。
ElasticSearch类比传统数据库
Relational DB | Elasticsearch |
---|---|
Databases | Indices |
Tables | Types |
Rows | Documents |
Columns | Fields |
安装
Elasticsearch 需要 Java8 或更新的 Java 环境。Java 下载
下载 Elasticsearch 6.0.1 压缩包并解压
$ curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.tar.gz
$ tar -xvf elasticsearch-6.0.1.tar.gz
启动
$ cd elasticsearch-6.0.1/bin
$ ./elasticsearch
如果你不想使用默认的集群名和结点名,可以在启动时指定相应的参数:
$ ./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name
交互
Elasticsearch启动后是一个 http 服务,默认在本地的 9200 端口。可以通过 curl 或者 Kibana 控制台进行操作。使用 curl 的命令格式如下:
$ curl -X<VERB> '<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
- VERB:HTTP 方法,如 GET、POST、PUT、HEAD、DELETE
- PROTOCOL:http 或者 https 协议
- HOST: Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
- PORT: Elasticsearch HTTP服务所在的端口,默认为 9200
- PATH: API路径
- QUERY_STRING: 一些可选的查询请求参数,例如
?pretty
参数将使请求返回更加美观易读的JSON数据 - BODY: 一个JSON格式的请求主体(如果请求需要的话)
例. 查询集群中结点的健康状况
$ curl -X GET "localhost:9200/_cat/health?v"
- 绿色:一切安好
- 黄色:所有结点均可用,某些结点