四、ELasticSearch API
通過HTTP使用JSON公開了Elasticsearch REST API。除非另有說明,本章列出的約定可以在整個REST API中應用。
1、多個指標(Multiple indices):
大多數引用索引引數的API都支援跨多個索引執行,使用簡單的test1、test2、test3符號(或_all表示所有索引)。它還支援萬用字元,例如:test*或*test或te*t或*test*,以及“排除”(-)的能力,例如:test*,-test3。
所有多指標API都支援以下url查詢字串引數:
(1)ignore_unavailable ——》控制是否忽略任何指定的索引不可用,這包括不存在的索引或閉索引。可以指定true或false。
(2)allow_no_indices ——》控制如果萬用字元索引表示式沒有產生具體的索引,是否失敗。可以指定true或false。例如,如果 指定了萬用字元表示式foo*,並且沒有以foo開頭的索引可用,那麼根據這個設定,請求將失敗。當 _all、*或沒有指定索引時,此設定也適用。這種設定也適用於別名,以防別名指向一個封閉索 引。
(3)expand_wildcards ——》控制擴充套件到何種具體索引萬用字元表示式。如果指定了open,則萬用字元表示式將擴充套件為僅開啟索 引; 如果指定了closed,則萬用字元表示式將僅擴充套件為關閉索引。也可以指定兩個值(開啟、關閉)以 展開到所有索引。如果沒有指定萬用字元,則將禁用萬用字元展開,如果全部指定,萬用字元表示式將 擴充套件到所有索引(這相當於指定open、closed)。
上述引數的預設設定取決於所使用的API。
注意:單索引api(如文件api和單索引別名api)不支援多個索引。
2、索引名稱中支援數學日期(Date math support in index names):
數學日期索引名稱是指使您能夠搜尋一系列時間序列索引,而不是搜尋所有時間序列索引並過濾結果或維護別名。限制搜尋索引的數量可以減少叢集上的負載並提高執行效能。例如,如果在日常日誌中搜索錯誤,可以使用日期計算名稱模板將搜尋限制在過去兩天內。幾乎所有具有索引引數的api都支援索引引數值中的數學日期。
日期數學索引名採用以下形式:
<static_name{date_math_expr{date_format|time_zone}}>
各個符號的意思:
|
靜態文字部分的名稱 |
|
能動態計算日期的動態日期數學表示式 |
|
是可選格式,計算日期應以這種格式呈現。預設為YYYY.MM.dd。 |
|
是可選時區。預設為utc。 |
必須將日期數學索引名稱表示式包含在尖括號中,並且所有特殊字元都應該使用URI編碼。例如:
# GET /<logstash-{now/d}>/_search GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search { "query" : { "match": { "test": "data" } } }
注意:日期數學字元的百分比編碼,用於日期四捨五入的特殊字元必須使用URI編碼,如下所示:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下面的例子展示了不同形式的日期數學索引名,它們決定給出的當前時間是2024年3月22日中午utc。
Expression | Resolves to |
---|---|
|
|
|
|
|
|
|
|
|
|
要在索引名稱模板的靜態部分中使用字元{ },請使用反斜槓\轉義它們,例如:
<elastic\\{ON\\}-{now/M}>
resolves toelastic{ON}-2024.03.01
下面的示例顯示了一個搜尋請求,假設索引使用預設的Logstash索引名稱格式Logstash - yyyy.mm .dd,請求在過去三天內搜尋Logstash索引:
# GET /<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search GET /%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search { "query" : { "match": { "test": "data" } } }
3、常見的選項
4、基於url的訪問控制