Elasticsearch API約定

Web中的應(yīng)用程序編程接口(API)是一組函數(shù)調(diào)用或其他編程指令,用于訪問該特定Web應(yīng)用程序中的軟件組件。例如,F(xiàn)acebook API通過訪問來自Facebook的數(shù)據(jù)或其他功能來幫助開發(fā)人員創(chuàng)建應(yīng)用程序;它可以是出生日期或狀態(tài)更新。

Elasticsearch提供了一個REST API,JSON可以通過HTTP訪問該API。Elasticsearch使用一些約定,我們現(xiàn)在將對其進(jìn)行討論。

多個索引

API中的大多數(shù)操作,主要是搜索和其他操作,都是針對一個或多個索引的。這有助于用戶只需執(zhí)行一次查詢,就可以在多個位置或所有可用數(shù)據(jù)中進(jìn)行搜索。許多不同的符號用于在多個索引中執(zhí)行操作。我們將在本章中討論其中的一些。

逗號分隔符號

POST /index1,index2,index3/_search

請求正文

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

響應(yīng)

來自index1, index2, index3的JSON對象中包含any_string。

_all 所有索引的關(guān)鍵字

POST /_all/_search

請求正文

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

響應(yīng)

來自所有索引的JSON對象,其中包含any_string。

通配符(*,+,–)

POST /school*/_search

請求正文

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

響應(yīng)

來自所有索引的JSON對象,這些索引始于其中包含CBSE的學(xué)校。

另外,您也可以使用以下代碼-

POST /school*,-schools_gov /_search

請求正文

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

響應(yīng)

JSON對象來自所有以“ school”開頭的索引,但不是來自school_gov并包含CBSE的索引。

還有一些URL查詢字符串參數(shù)-

  • ignore_unavailable?如果index(es)URL中不存在一個或多個,則不會發(fā)生錯誤或?qū)⑼V谷魏尾僮鳌@?,school索引存在,但book_shops不存在。

POST /school*,book_shops/_search

請求正文

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

請求正文

{
   "error":{
      "root_cause":[{
         "type":"index_not_found_exception", "reason":"no such index",
         "resource.type":"index_or_alias", "resource.id":"book_shops",
         "index":"book_shops"
      }],
      "type":"index_not_found_exception", "reason":"no such index",
      "resource.type":"index_or_alias", "resource.id":"book_shops",
      "index":"book_shops"
   },"status":404
}

考慮以下代碼-

POST /school*,book_shops/_search?ignore_unavailable = true

請求正文

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

響應(yīng)(無錯誤)

來自所有索引的JSON對象,這些索引始于其中包含CBSE的學(xué)校。

allow_no_indices

true如果帶有通配符的URL沒有索引,則此參數(shù)的值將防止錯誤。例如,沒有以schools_pri開頭的索引-

POST /schools_pri*/_search?allow_no_indices = true

請求正文

{
   "query":{
      "match_all":{}
   }
}

響應(yīng)(無錯誤)

{
   "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
   "hits":{"total":0, "max_score":0.0, "hits":[]}
}

expand_wildcards

此參數(shù)決定通配符是否需要擴(kuò)展為開放索引或封閉索引,或同時執(zhí)行這兩者。此參數(shù)的值可以是打開和關(guān)閉的,也可以是沒有。

例如,封閉索引學(xué)校-

POST /schools/_close

響應(yīng)

{"acknowledged":true}

考慮以下代碼-

POST /school*/_search?expand_wildcards = closed

請求正文

{
   "query":{
      "match_all":{}
   }
}

響應(yīng)

{
   "error":{
      "root_cause":[{
         "type":"index_closed_exception", "reason":"closed", "index":"schools"
      }],
      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

索引名稱中的日期數(shù)學(xué)支持

Elasticsearch提供了根據(jù)日期和時間搜索索引的功能。我們需要以特定格式指定日期和時間。例如,accountdetail-2015.12.30,索引將存儲2015年12月30日的銀行帳戶詳細(xì)信息??梢詧?zhí)行數(shù)學(xué)運(yùn)算以獲取特定日期或日期和時間范圍的詳細(xì)信息。

日期數(shù)學(xué)索引名稱的格式-

<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search

static_name是表達(dá)式的一部分,在每個日期的數(shù)學(xué)索引(如客戶明細(xì))中都保持不變。date_math_expr包含數(shù)學(xué)表達(dá)式,該數(shù)學(xué)表達(dá)式像now-2d一樣動態(tài)確定日期和時間。date_format包含將日期寫入諸如YYYY.MM.dd之類的索引中的格式。如果今天是2015年12月30日,則<accountdetail- {now-2d {YYYY.MM.dd}}>將返回accountdetail-2015.12.28。

表達(dá)解析為
<accountdetail-{now-d}>accountdetail-2015.12.29
<accountdetail-{now-M}>accountdetail-2015.11.30
<accountdetail-{now{YYYY.MM}}>accountdetail-2015.12

現(xiàn)在,我們將看到Elasticsearch中提供的一些常用選項(xiàng),這些選項(xiàng)可用于獲取指定格式的響應(yīng)。

美化的結(jié)果

我們可以通過添加URL查詢參數(shù)(即pretty = true)來在格式良好的JSON對象中獲得響應(yīng)。

POST /schools/_search?pretty = true

請求正文

{
   "query":{
      "match_all":{}
   }
}

響應(yīng)

……………………..
{
   "_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
   "_source":{
      "name":"Central School", "description":"CBSE Affiliation",
      "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
      "location": [31.8955385, 76.8380405], "fees":2000,
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
   }
}
………………….

人類可讀的輸出

此選項(xiàng)可以將統(tǒng)計響應(yīng)更改為人類可讀形式(如果human = true)或計算機(jī)可讀形式(如果human = false)。例如,如果human = true,則distance_kilometer = 20KM;如果human = false,則distance_meter = 20000,此時需要其他計算機(jī)程序使用響應(yīng)。

響應(yīng)過濾

通過將它們添加到field_path參數(shù)中,我們可以過濾對較少字段的響應(yīng)。例如,

POST /schools/_search?filter_path = hits.total

請求正文

{
   "query":{
      "match_all":{}
   }
}

響應(yīng)

{"hits":{"total":3}}
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清