ES全名Elasticsearch,
官方网站:https://www.elastic.co/
官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.1/index.html
中文版权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
一 介绍
ES是一个分布式的全文检索引擎,基于著名的全文索引开发包apache lucene。ES把lucene进行了分布式化,并提供REST api提供开箱即用的索引、搜索服务。ES提供便捷的扩展机制,新的节点可以动态加入已有集群,提高集群的存储、计算能力。
1基本概念
ES集群(cluster):ES一般以集群的方式对外提供服务,通过集群提高服务的计算和存储能力。一个集群可以是1台或者N台物理服务器。所有的查询请求可以被负载到集群中所有的机器。
节点:一个节点就是一个Elasticsearch Java进程,每个节点维护一定数量的数据,执行这部分数据的查询请求。一般一台物理机会部署多个节点,每个对应一块物理盘。
主节点(master):一个ES集群一般由多个节点组成,集群在启动后,会从所有的节点中选一个为master节点。它维护集群全局的元信息。如,集群里有哪些节点,哪些索引,索引的分片等,集群的状态更新和发布。同时,master节点也具有存储和查询功能。
数据节点(data node):用来存储数据,响应查询请求,接受并处理master节点发送的集群状态信息。
索引(index):一个索引由多个物理分片组成,分布在集群的多个节点上。
分片(shard):一个物理分片是一个完整的Lucene索引,是搜索的最小单位。每个分片可以包含1到N个段(segment)。
副本:ES在分布存储的过程中,为了提高数据的安全性,并充分利用集群内服务器的计算资源,可以给分片设置多个副本,分散存储于多台服务器,每个副本的数据是完全一样的,都可以提供搜索,当某个分片出现问题时,可以通过副本进行恢复。
段(segment):一个段就是一批具有相同文件名,不同文件名厚的Lucene文件集合。随着数据的增加,小的段合并成大的段,以提高资源利用率。
文档:ES中的文档类似于关系数据库中的一条记录,文档包含多个字段(field),每个filed可以有自己的数据类型,也可以有自己的索引分析方式。
translog:新索引的数据在内存里,为了防止这些数据由于断点或者进程意外终止而丢失,每个分片有自己对应的一个translog,所有的索引和删除操作记录在translog里面。如果发生意外可以通过replay translog里的操作而恢复数据。
查询:集群中的每个节点都可以接受查询请求,接受到客户端查询请求的节点我们称之为协调点,该节点会解析查询的索引并根据索引分片在集群中的分布情况将查询分发到对应的节点,等待所有分片的返回,最终在协调点进行查询结果的汇总返回客户端。
Elasticsearch | 关系数据库(如,MySQL) |
index | database |
type | table |
document | record |
filed | column |
2特点
基本特点:
- 实时数据
- 实时分析
- 分布式
- 高可用性
- 多用户
- 全文搜索(先建立索引,再对索引进行搜索的过程就叫全文检索)
- 面向文档
- rest风格API,每个操作的持久性
- 开源
二 基本操作
序号 | 操作 | 命令 | 说明 | |||||||||
1 | 创建索引 | curl -sXPUT "localhost:9200/test?pretty" -d'{"settings":{"index":{"number_of_shards":3,"number_of_replicas":2}}}' | 创建一个分片数3,副本为2的索引。(一般分片数默认是5,如果只有一台服务器则副本数为0) | |||||||||
2 | 查询 | 集群状态 | curl -sXGET localhost:9200/_cat/health?pretty // curl -sXGET localhost:9200/_cluster/health?pretty | 建议第2种方式。集群的状态有:green、yellow和red。正常情况下是green。
| ||||||||
3 | 集群节点 | curl -sXGET localhost:9200/_cat/nodes?v | 返回所有节点信息 | |||||||||
4 | 节点属性 | curl -sXGET localhost:9200/_cat/nodeattrs?v | ||||||||||
5 | 所有索引分片信息 | curl -sXGET localhost:9200/_cat/shards?v | ||||||||||
6 | 配置查询 | curl -sXGET localhost:9200/_cluster/settings?pretty | ||||||||||
7 | 所有索引 | curl -sXGET localhost:9200/_cat/indices?v | 返回所有的索引信息 | |||||||||
8 | 单个索引 | curl -sXGET localhost:9200/_cat/indices?v | grep '索引名' | ||||||||||
9 | 索引具体信息 | curl -sXGET localhost:9200/索引名?pretty | 返回这个索引的信息,settings(分片、副本等)和mappings(字段、类型等)的相关信息 | |||||||||
10 | 索引的配置 | curl -sXGET localhost:9200/索引名/_settings?pretty | pretty,返回结果格式美观。 | |||||||||
11 | 单个索引的分片信息 | curl -sXGET localhost:9200/_cat/shards/索引名?v | v,让输出内容表格显示表头。 | |||||||||
12 | 所有索引的doc数量 | curl -sXGET localhost:9200/_cat/count?v | 相当于查询日志总量。 | |||||||||
13 | 索引数据 | curl -sXGET localhost:9200/索引名/_search?pretty | 默认显示最近的10条。 | |||||||||
14 | 查看最近3条数据 | curl -sXGET "localhost:9200/索引名/_search?pretty" -d'{"query":{"match_all":{}},"size":3}' | 指定size大小。 | |||||||||
15 | 索引匹配数据查询 | curl -sXGET "localhost:9200/索引名/_search?pretty" -d'{"query":{"match":{"字段":"字段值"}}, //curl -sXGET "localhost:9200/索引名/_search?pretty" -d'{"query":{"term":{"字段":"字段值"}}, | match:模糊匹配。会提供一个分析器; term:精确查询,不分析。 | |||||||||
16 | 修改 | 关闭所有索引 | curl -XPOST localhost:9200/_close | |||||||||
17 | 开启所有索引 | curl –XPOST localhost:9200/_open | ||||||||||
18 | 关闭指定索引 | curl –XPOST localhost:9200/索引名/_close | ||||||||||
19 | 开启指定索引 | curl –XPOST localhost:9200/索引名/_open | ||||||||||
20 | 删除 | 删除单个索引 | curl -XDELETE localhost:9200/索引名 | |||||||||
21 | 删除所有索引 | curl -sXPUT "http://localhost:9200/_cluster/settings" -d '{"persistent":{"action.destructive_requires_name":false}}‘
curl -XDELETE localhost:9200/_all | ||||||||||
22 | 清除缓存 | curl -XGET localhost:9200/_cache/clear?pretty | ||||||||||