在Elasticsearch的REST API中,有不少使用技巧,這裏針對官方文檔給出的介紹,總結了幾個經常使用的例子。html
更多內容參考:Elastisearch文檔總結node
ES支持在一次請求中指定多個索引,能夠使用通配符或者日期表達式的方式:api
例如,foo*索引會匹配foo1,foo2,foo3等索引。_all則會匹配全部的索引。curl
同時也能夠針對不可用的索引進行限制。elasticsearch
日期表達式支持以下的格式:ide
<static_name{date_math_expr{date_format|time_zone}}>
static_name是索引的靜態部分ui
date_math_expr是日期表達式url
後面跟着date_format是日期的格式;time_zone爲時區spa
舉個例子,若是想要查詢logstash前兩天的日期,能夠寫成:code
curl -XGET 'localhost:9200/<logstash-{now/d-2d}>/_search' { "query" : { ... } }
再好比,當前的時間是2014年3月22日,那麼:
<logstash-{now/d}> 會匹配 logstash-2024.03.22 <logstash-{now/M}> 會匹配 logstash-2024.03.01 <logstash-{now/M{YYYY.MM}}> 會匹配 logstash-2024.03 <logstash-{now/M-1M{YYYY.MM}}> 會匹配 logstash-2024.02 <logstash-{now/d{YYYY.MM.dd|+12:00}} 會匹配 logstash-2024.03.23
過去三天的索引能夠表示爲:
curl -XGET 'localhost:9200/<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search' { "query" : { ... } }
全部的API均可以接受一個參數,filter_path,這個參數指定了過濾後的字段,返回的結果只會顯示過濾指定的內容:
curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score' { "took" : 3, "hits" : { "hits" : [ { "_id" : "3640", "_score" : 1.0 }, { "_id" : "3642", "_score" : 1.0 } ] } }
支持使用通配符,進行匹配
curl -XGET 'localhost:9200/_nodes/stats?filter_path=nodes.*.ho*' { "nodes" : { "lvJHed8uQQu4brS-SXKsNA" : { "host" : "portable" } } }
若是使用了兩個**則會匹配全部的內容
curl 'localhost:9200/_segments?pretty&filter_path=indices.**.version' { "indices" : { "movies" : { "shards" : { "0" : [ { "segments" : { "_0" : { "version" : "5.2.0" } } } ], "2" : [ { "segments" : { "_0" : { "version" : "5.2.0" } } } ] } }, "books" : { "shards" : { "0" : [ { "segments" : { "_0" : { "version" : "5.2.0" } } } ] } } } }
若是要過濾_source,那麼須要從新指定_source中的字段:
curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title' { "hits" : { "hits" : [ { "_source":{"title":"Book #2"} }, { "_source":{"title":"Book #1"} }, { "_source":{"title":"Book #3"} } ] } }
使用flat_settings參數,它只會影響到返回的內容顯示,例如設置爲true後返回的內容是下面這種:
{ "persistent" : { }, "transient" : { "discovery.zen.minimum_master_nodes" : "1" } }
而設置爲false,則爲:
{ "persistent" : { }, "transient" : { "discovery" : { "zen" : { "minimum_master_nodes" : "1" } } } }
正常返回的數據,多是混雜在一行的,人的肉眼很難分別其中的信息,這時,能夠再請求的末尾添加?pretty=true,或者?format-yaml設置成可讀的形式。
pretty是以JSON的形式返回結果。直接寫?pretty與?pretty=true做用同樣
yaml則是使用橫向縮進的方式展示結果。
返回的結果設置爲可讀,對於咱們肉眼去觀察結果也很重要,好比:
"exists_time": "1h" "size": "1kb" 要比 "exists_time_in_millis": 3600000 "size_in_bytes": 1024 容易理解的多
【1】YAML格式