elasticstarch执行语句

介绍

索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。

es与数据库对应关系

数据库类型 库名 表名 记录 字段
Relational DB Databases Tables Rows Columns
Elasticsearch Indices Types Documents Fields

文档元数据

一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是(其实就是数据库字段):

节点 说明
_index 文档存储的地方
_type 文档代表的对象的类
_id 文档的唯一标识

索引创建原则

  1. 类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的index里面,比如说company index,不合适的。
  2. index中包含了很多类似的document:类似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
  3. 索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

语法示例

运维相关

查看ES集群中所有节点信息,以及各个节点内存和CPU相关的指标

1
curl -X GET 'http://192.168.40.100:9200/_cat/nodes?v'

查看整个ES集群的状态,以及节点、分片等信息

1
curl -XGET 'http://192.168.40.100:9200/_cluster/health?pretty'  

如果集群状态不正常了(status是yellow或者red),可以通过以下命令查看具体是哪个index中的哪些shard出问题了:

1
2
curl -XGET 'http://192.168.40.100:9200/_cluster/health?pretty&level=indices' 
curl -XGET 'http://192.168.40.100:9200/_cluster/health?pretty&level=shards'

列出ES集群中所有的index信息

1
curl -XGET 'http://192.168.40.100:9200/_cat/indices?v'

显示索引的别名信息、过滤器和路由信息

1
GET _cat/aliases?v

查看每个节点的分片数量以及每个节点的磁盘空间使用情况

1
GET _cat/allocation?v

查看索引或集群的文档数量

1
2
3
4
5
# 查询全部
GET _cat/count?v

# 查询单个索引
GET _cat/count/books?v

查看每个数据节点上被fielddata所使用的堆内存大小

1
GET _cat/fielddata?v

显示master节点的id、ip和节点名

1
GET _cat/master?v

返回集群中各节点信息

1
GET _cat/nodes?v

查看节点所运行插件信息

1
GET /_cat/plugins?v

查看索引分片恢复进度

1
GET /_cat/recovery?v

查看集群中的快照库

1
GET /_cat/repositories?v

查看集群每个节点的线程池统计信息

1
GET /_cat/thread_pool?v

查看集群中每个节点的分片信息,包括分片名称、编号、是否是主分片、状态、文档数据、空间大小、所有节点ip、节点名称

1
GET /_cat/shards?v

查看索引的segment信息,注意,索引数据实际上是以一个个segment的方式进行存储的

1
GET /_cat/segments?v

查看集群的健康状态

1
GET /_cluster/health

返回集群的完整状态信息。

1
GET /_cluster/state

返回集群的完整状态信息。

1
GET /_cluster/state/version

获取各种统计数据。包括两部分数据:

  • 索引层面:分片数、存储大小、内存使用等;
  • 节点层面:节点数量、节点角色、操作系统、jvm信息、内存、CPU、插件等;
1
GET /_cluster/stats

明确地执行集群重新路由分配命令。

1
POST /_cluster/reroute

更新集群中的配置,如果是永久配置,需要重启集群;临时配置的訞 不不需要重启集群

1
2
3
4
5
6
PUT /_cluster/settings
{
"persistent": {
"discovery.zen.minimum_master_nodes":1
}
}

统计集群中一个或多个节点的统计信息。

1
GET /_nodes

或:

1
GET /_nodes/es01,es02

获取集群中正在节点中执行的任务信息。

1
GET /_tasks

查看分片没有被分配的原因,比如通过GET /_cat/shards?v看到某个索引没有被分配,就可以使用下面的命令来查看没有被分配的原因。

1
2
3
4
5
6
GET /_cluster/allocation/explain
{
"index":"twitter",
"shard":0,
"primary":true
}

创建索引

1
curl -X PUT "http://192.168.40.100:9200/索引名?pretty"

删除索引

1
curl -XDELETE 'http://192.168.40.100:9200/索引名'

关闭索引

1
curl -XPOST 'http://192.168.40.100:9200/索引名/_close'

开启索引

1
curl -XPOST 'http://192.168.40.100:9200/索引名/_open'

动态修改ES相关配置

1
curl -XPUT  'http://192.168.40.100:9200/索引名/_settings' -d '{"index":{"refresh_interval":"60s"}}'

设置最大查询条数

1
curl -XPUT 'http://192.168.40.100:9200/索引名/_settings' -d'{"index":{"max_result_window":1000000}}'

设置默认副本和分片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -XPOST http://192.168.40.100:9200/_template/template_http_request_record -H 'Content-Type: application/json' -d '
{
"order": 0,
"index_patterns": [
"*" #匹配的索引
],
"settings": {
"index": {
"number_of_shards": "5",
"number_of_replicas": "0"
}
},
"mappings": {},
"aliases": {}
}'

变更之前的副本数

1
curl -XPUT http://192.168.40.100:9200/_settings -H 'Content-Type: application/json' -d '{"index":{"number_of_replicas":0}}'

基本语法

查询语法参考该文档

查询文档

1
curl -XGET 'http://192.168.40.100:9200/索引名/类型/ID'

新增文档

1
2
3
4
5
6
7
8
curl -XPOST 'http://192.168.40.100:9200/索引名/类型/ID?pretty' -d '
{
"zbbm": "10010103Y",
"zzid": "0600",
"tjqj": "201712",
"gwxd": 3124543444.71,
"nbys":2073344433.12
}'

删除文档

1
curl -XDELETE 'http://192.168.40.100:9200/索引名/类型/ID'

修改文档

1
2
3
4
5
6
7
curl -XPOST 'http://192.168.40.100:9200/索引名/类型/ID/_update' -d '
{
"doc":{
"gwxd":1237674.23,
"nbys": 123233221212
}
}'

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!