本文集主要是总结自己在项目中使用ES 的经验教训,包括各种实战和调优。
本文主要包含es 相关的各种查询命令,在进行系统调优和系统故障排查等方面还是会用到的。
系统级的查询命令
该模块均来自:http://blog.csdn.net/xialei199023/article/details/48085125
查看集群状态信息: curl -XGET "http://localhost:9200/_cat/health?v"
显示集群系统信息,包括CPU JVM等: curl -XGET http://localhost:9200/_cluster/stats?pretty
显示集群详细信息。包括节点、分片等。 curl -XGET http://localhost:9200/_cluster/state?pretty
显示集群详细信息:curl -XGET http://localhost://localhost:9200/_cluster/pending_task?pretty
查看每个操作返回字段的含义: curl -XGET "192.168.1.101:9200/_cat/heath?help"
指定返回字段:curl -XGET "192.168.1.101:9200/_cat/health?h=cluster,pri,relo&v"
查看集群中节点信息: curl -XGET "192.168.1.101:9200/_cat/nodes?v"
查看每个分片存放数据量等信息:curl -XGET http://localhost:9200/_cat/shards
查看mapping: curl -XGET ‘http://localhost:9200/subscribe/_mapping’?pretty
查看分词情况: curl http://localhost:9200/subscribe/_analyze?analyzer="english" -d'{"text":"helloworld"}'
x-pack激活命令:curl -XPUT 'http://localhost:9200/_xpack/license' -H "Content-Type: application/json" -d @license.json
查看集群相关信息:
curl -XGET http://localhost:9200/?pretty
curl -XGET localhost:9200/_cat/shards
curl -XGET http://localhost:9200/_settings
关闭节点 :关闭指定192.168.1.1节点
curl -XPOST ‘http://192.168.1.1:9200/_cluster/nodes/_local/_shutdown’
curl -XPOST ‘http://localhost:9200/_cluster/nodes/192.168.1.1/_shutdown’
关闭主节点
curl -XPOST ‘http://localhost:9200/_cluster/nodes/_master/_shutdown’
关闭整个集群
curl -XPOST ‘http://localhost:9200/_shutdown?delay=10s’
curl -XPOST ‘http://localhost:9200/_cluster/nodes/_shutdown’
curl -XPOST ‘http://localhost:9200/_cluster/nodes/_all/_shutdown’
delay=10s表示延迟10秒关闭
查看集群中索引信息:curl -XGET "192.168.1.101:9200/_cat/indices?v" //可以查看出文档数和所占存储大小
创建一个信息索引:curl -XPUT "192.168.1.101:9200/index_test"
查看所有index:curl 'localhost:9200/_cat/indices?v'
创建索引:curl -XPUT 'http://localhost:9200/index'
删除mapping:curl -XDELETE 'localhost:9200/index_test/_mapping/test_type'
查看索引的mapping:curl -XGET 'localhost:9200/index_test/_mapping/test_type'
查询节点状态:
curl -XGET ‘http://localhost:9200/_nodes/stats?pretty=true’ 查看当前线程组状态
curl -XGET ‘http://localhost:9200/_nodes/192.168.1.2/stats?pretty=true’
curl -XGET ‘http://localhost:9200/_nodes/process’
curl -XGET ‘http://localhost:9200/_nodes/_all/process’
curl -XGET ‘http://localhost:9200/_nodes/192.168.1.2,192.168.1.3/jvm,process’
curl -XGET ‘http://localhost:9200/_nodes/192.168.1.2,192.168.1.3/info/jvm,process’
curl -XGET ‘http://localhost:9200/_nodes/192.168.1.2,192.168.1.3/_all
curl -XGET ‘http://localhost:9200/_nodes/hot_threads
数据级的查询命令:
curl -i -XGET http://localhost:9200/website/blog/124?pretty -i参数会打印响应头
GET /website/blog/123?_source=title,text 检索文档的一部分
GET /website/blog/123/_source 只获得原数据
curl -i -XHEAD http://localhost:9200/website/blog/123 检查文档是否存在,不会返回响应体,只有HTTP头
多索引查询语句: curl -XGET localhost:9200/test1,test2/_search?pretty -d '{"query":{"match_all":{}}}'
带路由查询语句: curl -XGET “http://localhost:9200/dy/jdbc/CDNMR9G2051780GP?routing=W4575369336327128536
带两个查询条件的命令:curl -XGET http://localhost:9200/dy/weiyongjun1/_search?q=*&routing=W7661183092532399139&title="国家欠70后一个交代你知道吗"
通过query的查询语句:
curl -XGET 'http://localhost:9200/subscribe_moparticle/moparticle/_search' -d '{
"query" : {
"term" : { "docid" : "9KNV3MB80513003V" }
}
}'
索引类接口
- 通过下面的接口创建一个索引名称为indexname且包含3个分片、1个副本的索引。
curl -XPUT 'localhost:9200/indexname?pretty' -H 'Content-Type: application/ json' -d'
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}'
- 通过下面的接口删除索引。
curl -XDELETE ' localhost:9200/indexname '
通过该接口就可以删除索引名称为indexname的索引。
通过下面的接口可以删除多个索引。
curl -XDELETE 'localhost:9200/indexname1, indexname2 '
curl -XDELETE ' localhost:9200/indexname*'
通过下面的接口可以删除集群下的全部索引。
curl -XDELETE ' localhost:9200/_all'
curl -XDELETE ' localhost:9200/* '
进行全部索引的删除是很危险的,我们可以通过在配置文件中添加下面的配置信息,来关闭使用_all和使用通配符删除索引的接口,使删除索引只能通过索引的全称进行。
action.destructive_requires_name:true
- 通过下面的接口获取索引的信息,其中,pretty参数用于格式化输出结果,以便更容易阅读。
curl -XGET ' localhost:9200/indexname?pretty'
- 通过下面的接口关闭、打开索引。
curl -XPOST ' localhost:9200/indexname/_close'
curl -XPOST ' localhost:9200/indexname/_open'
- 通过下面的接口获取一个索引中具体type的mapping映射。
curl -XGET ' localhost:9200/indexname/typename/_mapping?pretty'
当一个索引中有多个type时,获得mapping时要加上typename。
- 通过下面的接口获取索引中一个字段的信息。
curl -XGET 'localhost:9200/indexname/indexname/_mapping/field/fieldname'
- 通过下面的接口为索引添加别名(_alias)。
curl -XPUT ' localhost:9200/indexname/_alias/aliasname?pretty'
以上接口为索引indexname添加了别名aliasname,添加成功后可以通过别名或索引名访问该索引。
- 通过下面的接口对索引别名进行批量操作(_aliases)。
curl -XPOST ' localhost:9200/_aliases?pretty'-H 'Content-Type: application/json' -d'{
"actions": [
{ "remove": {"index": "indexname", "alias":"aliasname" }},
{ "add": { "index": "indexname", "alias": "newalias" }}
]
}'
通过_aliases接口对索引的别名进行添加和移除,remove表示移除,add表示添加。可以同时对多个索引进行操作。
- 通过下面的接口获取索引的settings。
curl -XGET'localhost:9200/indexname/_settings?pretty'
settings是索引级别的,不需要添加typename。
- 通过下面的接口进行分析(分析某个字段是如何建立索引的)。
curl-XGET 'localhost:9200/indexname/_analyze?pretty' -H 'Content-Type:application/json' -d'{
"field": "fieldname",
"text": "使用fieldname分词的数据"
}'
该接口返回的是对字符串“使用fieldname分词的数据”使用fieldname的分词方式。
- 通过下面的接口清除索引上的缓存。
curl-XPOST 'localhost:9200/indexname/_cache/clear?pretty'
- 通过下面的接口刷新(flush)索引。
curl-XPOST 'localhost:9200/indexname/_flush?pretty'
- 通过下面的接口刷新(refresh)索引。
curl-XPOST 'localhost:9200/indexname/_refresh ?pretty'
- 通过下面的接口对索引进行优化:
curl-XPOST 'localhost:9200/indexname/_forcemerge?pretty'
在Elasticsearch5.x之后的版本中使用_forcemerge替换了_optimize命令。
cat接口
cat命令提供了一系列的Elasticsearch集群状态的查询接口。通过执行curl-XGET localhost: 9200/_cat 获取所有的_cat命令:
/_cat/aliases
/_cat/aliases/{alias}
/_cat/templates
/_cat/health
/_cat/nodes
/_cat/allocation
/_cat/count
/_cat/count/{index}
/_cat/indices
/_cat/indices/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/pending_tasks
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}/_cat/tasks
/_cat/nodeattrs
/_cat/master
/_cat/snapshots/{repository}
/_cat/segments
/_cat/segments/{index}
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/shards
/_cat/shards/{index}
/_cat/plugins
/_cat/repositories
在上述接口中可以添加的参数如下。
- 参数v(verbose):让输出的信息显示表头信息。
curl -XGET 'localhost:9200/_cat/master?v'
id host ip node
xLslDXvxQHKVnWCKJROG7g 192.168.0.75 192.168.0.75 vm75
如果不添加参数v,则不显示上面的表头信息“id”“host”“ip”“node”。
- 参数help:输出该命令可以显示的列。
curl -XGET 'localhost:9200/_cat/master?help'
id | |node id
host | h |host name
ip | |ip address
node | n |node name
在上述结果中,第1列表示_cat/master命令可以返回的字段名称,第2列是简称,第3列是字段的描述。
- 参数h:可以指定返回的字段。
$ curl -XGET 'localhost:9200/_cat/master?v&h=host,ip,node'
host ip node
192.168.0.75 192.168.0.75 vm75
3.查看集群的状态
- 查看集群健康状态的接口。
curl -XGET 'localhost:9200/_cluster/health?pretty'
curl -XGET ' localhost:9200/_cluster/health?level=indices&pretty'
curl -XGET ' localhost:9200/_cluster/health?level=shards&pretty'
接口1是集群的状态;接口2不仅包含集群的状态,还包含索引级的状态;接口3是更细粒度的分片级的状态。
- 查看集群状况的接口(_cluster/state)。
curl -XGET 'localhost:9200/_cluster/state?pretty'
- 查看集群统计信息的命令(_cluster/stats)。
curl-XGET 'localhost:9200/_cluster/stats?pretty'
在返回的结果中包含了在集群中包含的索引个数、节点信息、分片信息、内存信息、CPU信息、缓存信息等。
- 查看一个索引的统计信息的命令。
curl -XGET ' localhost:9200/indexname/_stats?pretty'
返回一个索引的各项统计信息,包括:索引的大小、数据条数、查询次数、查询耗时、分片数、merger数、刷新次数(flush和refresh)、查询缓存的大小等跟索引相关的统计信息。
- 查看集群挂起的任务接口(_cluster/pending_tasks),并返回集群中待执行的任务。
curl -XGET 'localhost:9200/_cluster/pending_tasks?pretty'
4.查看节点的状态
- 查看节点信息的接口。
curl -XGET ' localhost:9200/_nodes?pretty'
返回集群中各个节点的详细信息例如:集群名称、节点名称、节点所在服务器的操作系统、JVM、用到的Elasticsearch模块等节点信息。
- 查看节点统计信息的接口。
curl -XGET ' localhost:9200/_nodes/stats?pretty'
返回集群中各个节点的统计信息,例如:查询次数、写索引次数、merge 次数及耗时、索引大小、分片数等统计信息。
- 查看节点中的热线程。
curl -XGET 'localhost:9200/_nodes/{nodeID}/hot_threads?pretty'
返回集群中所有节点的热线程,如果加上node id,则返回该节点的热线程。
Elasticsearch虽然提供的接口功能非常强大,但是在使用上并不是很友好,本书的作者之一刘淏开源了两个Elasticsearch插件sp-console和sp-tools。
- sp-console(https://github.com/psfu/es-sp-console)封装了cat的命令,体验非常友好,在使用上完全仿照Linux的界面,可以查看历史的查询结果及出错信息,并支持上下键切换历史命令等。
- sp-tools(https://github.com/psfu/es-sp-tools)是一个权限和日志管理工具,可以通过Cookie中的密钥来维护登录状态,插件支持IP白名单和黑名单,也可以通过sp-console来控制其启动与关停,更新IP白名单和黑名单等信息;其日志记录模块经过大量优化,对系统占用非常友好。
参考链接:http://blog.csdn.net/z69183787/article/details/70142101
https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453561845&idx=1&sn=979894f5566113e3bad60380c8398405&chksm=8cd13497bba6bd8150643a5bcf56bd9a562dc90f76d1afa5618f9ca27f278a6a22080f81c2e1&scene=21#wechat_redirect