Elasticsearch API約定


web中的應用程式設計介面(API)是一組函式呼叫或其他程式設計指令以存取該特定web應用中的軟體元件。 例如,Facebook API幫助開發者通過從Facebook存取資料或其他功能來建立應用程式; 它可以是出生日期或狀態更新。

Elasticsearch提供了一個REST API,通過HTTP通過JSON存取。 Elasticsearch使用以下約定 -

多索引

API中的大多數操作(主要是搜尋和其他操作)用於一個或多個索引。 這有助於使用者通過只執行一次查詢來搜尋多個位置或所有可用資料。 許多不同的符號用於在多個索引中執行操作。 我們將在本節討論其中的一些。

逗號分隔符號

POST http://localhost:9200/index1,index2,index3/_search

請求正文

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

響應

來自index1index2index3的JSON物件,其中包含any_string

所有索引的_all關鍵字

POST http://localhost:9200/_all/_search

請求正文

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

響應

來自所有索引的JSON物件,並且有any_string

萬用字元(*,+, - )

POST http://localhost:9200/school*/_search

請求正文

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

響應
來自所有索引的JSON物件,從school 開始,有CBSE。

或者,也可以使用以下程式碼 -

POST http://localhost:9200/school*,-schools_gov /_search

請求正文

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

響應

來自所有索引的JSON物件,它們以「school」開頭,但不是schools_gov並且在其中有CBSE。
還有一些URL查詢字串引數 -

  • ignore_unavailable - 如果URL中存在的一個或多個索引不存在,則不會發生錯誤或操作不會停止。 例如,schools 索引存在,但book_shops不存在 -
    POST http://localhost:9200/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 http://localhost:9200/school*,book_shops/_search?ignore_unavailable = true

請求正文

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

響應(無錯誤)
來自所有索引的JSON物件,從 school 開始,有CBSE

allow_no_indices

如果帶有萬用字元的網址沒有索引,這個引數是true值時將防止錯誤。

例如,不是以schools_pri開頭的索引 -

POST
http://localhost:9200/schools_pri*/_search?allow_no_indices = true

請求正文

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

響應(無錯誤)

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

expand_wildcards

此引數確定萬用字元是否需要擴充套件為開啟索引或閉合索引或兩者。 此引數的值可以是開啟和關閉或無和全部。

例如,關閉索引schools -

POST http://localhost:9200/schools/_close

響應

{"acknowledged":true}

看看下面的程式碼 -

POST http://localhost:9200/school*/_search?expand_wildcards = closed

請求正文

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

響應

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

      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

日期索引名稱中的數學支援

Elasticsearch提供了根據日期和時間搜尋索引的功能。我們需要以特定格式指定日期和時間。 例如,accountdetail-2015.12.30,索引將儲存2015年12月30日的銀行帳戶詳細資訊。可以執行數學操作以獲取特定日期或日期和時間範圍的詳細資訊。

日期數位索引名稱的格式 -

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

static_name是表示式的一部分,在每個日期數學索引(如帳戶詳細資訊)中保持相同。 date_math_expr包含動態確定日期和時間的數學表示式,如now-2ddate_format包含日期在索引中寫入的格式,如YYYY.MM.dd。 如果今天的日期是2015年12月30日,則<accountdetail- {now-2d {YYYY.MM.dd}}>將返回accountdetail-2015.12.28

表示式 解析為
<accountdetail-{now-d}> accountdetail-2016.12.29
<accountdetail-{now-M}> accountdetail-2015.11.30
<accountdetail-{now{YYYY.MM}}> accountdetail-2015.12

現在將看到Elasticsearch中可用於獲取指定格式的響應的一些常見選項。

美化結果

可以通過附加一個網址查詢引數(即pretty = true),獲得格式正確的JSON物件的響應。

POST http://localhost:9200/schools/_search?pretty = true

請求正文

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

響應

……………………..
{
   "_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"
   }
}    
………………….

人類可讀輸出

此選項可以將統計響應更改為人類可讀的形式(如果human = true)或計算機可讀形式(如果human = false)。 例如,如果human = true那麼distance_kilometer = 20KM,如果human = false那麼distance_meter = 20000,則是響應需要被另一個計算機程式使用。

響應過濾
可以通過將其新增到field_path引數中來過濾對較少欄位的響應。 例如,

POST http://localhost:9200/schools/_search?filter_path = hits.total

請求正文

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

響應

{"hits":{"total":3}}