所有其他語(yǔ)言可以使用 RESTful API 通過端口 9200 和 Elasticsearch 進(jìn)行通信,你可以使用WEB客戶端或者curl命令來和ES交互。下面介紹用curl命令來交互的具體用法:
一、格式
curl -X' :// : / ? ' -d ''
被 < > 標(biāo)記的部件含義:
VERB
適當(dāng)?shù)?HTTP 方法 或 謂詞 : GET、 POST、 PUT、 HEAD 或者 DELETE。
PROTOCOL
http 或者 https(如果你在 Elasticsearch 前面有一個(gè) https 代理)
HOST
Elasticsearch 集群中任意節(jié)點(diǎn)的主機(jī)名,或者用 localhost 代表本地機(jī)器上的節(jié)點(diǎn)。
PORT
運(yùn)行 Elasticsearch HTTP 服務(wù)的端口號(hào),默認(rèn)是 9200 。
PATH
API 的終端路徑(例如 _count 將返回集群中文檔數(shù)量)。Path 可能包含多個(gè)組件,例如:_cluster/stats 和 _nodes/stats/jvm 。
QUERY_STRING
任意可選的查詢字符串參數(shù) (例如 ?pretty 將格式化地輸出 JSON 返回值,使其更容易閱讀)
BODY
一個(gè) JSON 格式的請(qǐng)求體 (如果請(qǐng)求需要的話)
二、API類型
1.數(shù)據(jù)寫入(POST)
往本地ES中寫入一條數(shù)據(jù),索引名稱為"test_log-2018-10-24",類型名稱為"test_log":
curl -XPOST http://127.0.0.1:9200/test_log-2018-10-24/test_log -d '{ "date":"1540369436", "user":"test", "mesg":"this is a test message" }' #返回: {"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":1,"result":"created","_shards":{"total":1,"successful":1,"failed":0},"created":true}
2.數(shù)據(jù)獲?。℅ET)
從本地ES中獲取一條數(shù)據(jù),索引名稱為"test_log-2018-10-24",類型名稱為"test_log",id名稱為"AWalLVzvZ_iZW0h4u8UH":
curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalLVzvZ_iZW0h4u8UH #返回 {"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":1, "found":true,"_source":{ "date":"1540369436", "user":"test", "mesg":"this is a test message" }}
3.數(shù)據(jù)刪除(DELETE)
刪除剛才插入的數(shù)據(jù):
curl -XDELETE http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalLVzvZ_iZW0h4u8UH #返回 {"found":true,"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":2,"result":"deleted","_shards":{"total":1,"successful":1,"failed":0}}
注意:刪除數(shù)據(jù),不但針對(duì)單條數(shù)據(jù),還可以使用通配符刪除整個(gè)type乃至整個(gè)索引
例如:
curl -XDELETE 'http://127.0.0.1:9200/*-${DATA}'
三、常用API
1._update
局部更新
curl -XPOST 'http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalXZ4cZ_iZW0h4vlQj/_update' -d '{ "doc":{ "user":"fjc" } }' #返回 {"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalXZ4cZ_iZW0h4vlQj","_version":2,"result":"updated","_shards":{"total":1,"successful":1,"failed":0}}
2._search
全文搜索
curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/_search?q=test curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/_search?q=mesg:test
querystring語(yǔ)法(上例中,?q=后面寫的就是querystring語(yǔ)法):
全文檢索:直接寫搜索的單詞,例如加上例中的test
單字段的全文檢索:在搜索單詞前加上字段名和冒號(hào),比如,如果知道單詞test肯定出現(xiàn)在mesg字段,可以寫作mesg:test
單字段的精確檢索:在搜索單詞前后加上雙引號(hào),比如user:"fjc"
多個(gè)檢索條件的組合:可以使用NOT、AND和OR來組合檢索,注意必須是大寫
字段是否存在:exists:user表示要求user字段存在,missing:user表示要求user字段不存在
通配符:用?表示單字母,*表示任意個(gè)字母
近似搜索:用~表示搜索單詞可能有一兩個(gè)字母寫得不對(duì),請(qǐng)Elasticsearch按照相似度返回結(jié)果。比如test~
范圍搜索:對(duì)數(shù)值和時(shí)間,Elasticsearch都可以使用范圍搜索,比如:rtt>300、date:["now-6h" TO "now"}等。其中,[]表示端點(diǎn)數(shù)值包含在范圍內(nèi),{}表示端點(diǎn)數(shù)值不包含在范圍內(nèi)
3._cluster
獲取集群健康狀態(tài)
curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty' Enter host password for user 'logview': { "cluster_name" : "idca-elk", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 141, "active_shards" : 277, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
獲取節(jié)點(diǎn)狀態(tài)
curl -XGET 'http://127.0.0.1:9200/_cluster/state/nodes?pretty' Enter host password for user 'logview': { "cluster_name" : "idca-elk", "nodes" : { "xSTX8HulT7eLrHtx8dpVbg" : { "name" : "elk02", "ephemeral_id" : "iql7vwvBSWSyx7PrsUMAGg", "transport_address" : "172.16.1.26:9300", "attributes" : { } }, "gvlGkHa9QcyIsz31PjyZaw" : { "name" : "elk03", "ephemeral_id" : "9Gxyu9XrSSGNIPWKDAsfpw", "transport_address" : "172.16.1.27:9300", "attributes" : { } }, "GVf_Yo-9RBW9_oUrqIPOZw" : { "name" : "elk01", "ephemeral_id" : "ZjAUQHGYS0KUMT1iiGS4Jg", "transport_address" : "172.16.1.25:9300", "attributes" : { } } } }
獲取主節(jié)點(diǎn)狀態(tài)
Enter host password for user 'logview': { "cluster_name" : "idca-elk", "master_node" : "GVf_Yo-9RBW9_oUrqIPOZw" }
顯示集群的詳細(xì)信息
curl -XGET 'http://127.0.0.1:9200/_cluster/stats?human&pretty'
4._cat
查看主節(jié)點(diǎn)
curl -XGET 'http://127.0.0.1:9200/_cat/master?pretty&v' Enter host password for user 'logview': id host ip node GVf_Yo-9RBW9_oUrqIPOZw 172.16.1.25 172.16.1.25 elk01
查看所有索引
curl -XGET 'http://127.0.0.1:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open apache-2018-10-26 bksy7QOCQQyHcBazjB5TEg 5 1 443452 0 259.4mb 129.7mb green open user_audit-2018-10-26 41PM-4WpRJ6Evhar0dREsA 5 1 95 0 575.2kb 287.6kb green open domain_log-2018-10-24 d8zG7XL3RtyvyqAIJp7GvQ 5 1 11307735 0 11.4gb 5.7gb
查看單節(jié)點(diǎn)健康狀態(tài)
curl -XGET 'http://127.0.0.1:9200/_cat/health?v' epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1540530477 13:07:57 idca-elk green 3 3 277 141 0 0 0 0 - 100.0%
查看分片信息
curl -XGET 'http://127.0.0.1:9200/_cat/shards?v' index shard prirep state docs store ip node domain_log-2018-10-22 3 r STARTED 1975611 1gb 172.16.1.27 elk03 domain_log-2018-10-22 3 p STARTED 1975611 1gb 172.16.1.25 elk01 domain_log-2018-10-22 2 p STARTED 1979052 1gb 172.16.1.26 elk02
查看插件信息
curl -XGET 'http://127.0.0.1:9200/_cat/plugins?v