1. 程式人生 > >四、ELasticSearch API

四、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}}>

各個符號的意思:

static_name

靜態文字部分的名稱

date_math_expr

能動態計算日期的動態日期數學表示式

date_format

是可選格式,計算日期應以這種格式呈現。預設為YYYY.MM.dd。

time_zone

是可選時區。預設為utc。

必須將日期數學索引名稱表示式包含在尖括號中,並且所有特殊字元都應該使用URI編碼。例如:

# GET /<logstash-{now/d}>/_search
GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}

注意:日期數學字元的百分比編碼,用於日期四捨五入的特殊字元必須使用URI編碼,如下所示:

<

%3C

>

%3E

/

%2F

{

%7B

}

%7D

|

%7C

+

%2B

:

%3A

,

%2C

下面的例子展示了不同形式的日期數學索引名,它們決定給出的當前時間是2024年3月22日中午utc。

Expression Resolves to

<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

要在索引名稱模板的靜態部分中使用字元{ },請使用反斜槓\轉義它們,例如:

  • <elastic\\{ON\\}-{now/M}> resolves to elastic{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的訪問控制