English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Elasticsearch API约定

L'interfaccia di programmazione dell'applicazione web (API) è un insieme di chiamate di funzione o istruzioni di programmazione utilizzate per accedere ai componenti software di un'applicazione web specifica. Ad esempio, l'API di Facebook aiuta gli sviluppatori a creare applicazioni accedendo ai dati di Facebook o ad altre funzionalità; può essere la data di nascita o l'aggiornamento di stato.

Elasticsearch fornisce un'API REST, che può essere acceduto tramite HTTP. Elasticsearch utilizza alcune convenzioni, che discuteremo ora.

Più indici

La maggior parte delle operazioni dell'API, principalmente ricerche e altre operazioni, sono rivolte a un o più indici. Questo aiuta gli utenti a eseguire una singola query per cercare in più posizioni o in tutti i dati disponibili. Vengono utilizzati molti simboli per eseguire operazioni su più indici. Ne discuteremo alcuni in questa sezione.

Simboli separati da virgola

POST /index1,index2,index3/_search

请求正文

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

响应

Oggetto JSON proveniente dagli indici index1, index2, index3 che contiene any_string.

_all Tutti gli indici delle chiavi

POST /_all/_search

请求正文

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

响应

Oggetto JSON proveniente da tutti gli indici che contengono any_string.

Caratteri jolly (*, +, –)

POST /school*/_search

请求正文

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

响应

Oggetto JSON proveniente da tutti gli indici che iniziano con scuole che contengono CBSE.

Inoltre, puoi anche utilizzare il seguente codice-

POST /school*,-schools_gov /_search

请求正文

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

响应

Oggetto JSON proveniente da tutti gli indici che iniziano con "school", ma non provenienti da school_gov e che contengono CBSE.

Ci sono anche alcuni parametri di stringa di ricerca dell'URL-

  • ignore_unavailable−Se l'URL dell'indice(es) non contiene uno o più indici, non si verificherà alcun errore o non si interromperà alcuna operazione. Ad esempio, l'indice school esiste, ma book_shops non esiste.

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

Considera il seguente codice-

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

请求正文

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

Risposta (nessun errore)

Oggetto JSON proveniente da tutti gli indici che iniziano con scuole che contengono CBSE.

allow_no_indices

trueSe l'URL con caratteri jolly non è indicizzata, il valore di questo parametro impedirà gli errori. Ad esempio, non esiste un'indice che inizia con schools_pri-

POST /schools_pri*/_search?allow_no_indices = true

请求正文

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

Risposta (nessun errore)

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

expand_wildcards

Questo parametro determina se il carattere jolly deve essere espanso in un indice aperto o chiuso, o se deve eseguire entrambi. Il valore di questo parametro può essere aperto, chiuso o non specificato.

Ad esempio, chiudi l'indice delle scuole-

POST /schools/_close

响应

{"acknowledged":true}

Considera il seguente codice-

POST /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
}

Supporto matematico nei nomi degli indici

Elasticsearch offre la funzione di ricerca degli indici basata su data e ora. Dobbiamo specificare la data e l'ora in un formato specifico. Ad esempio, accountdetail-2015.12.30, l'indice archiverà i dettagli del conto bancario del 30 dicembre 2015. È possibile eseguire operazioni matematiche per ottenere dettagli specifici di una data o di un intervallo di date e ore.

Formato del nome dell'indice matematico di data-

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

static_name è parte di un'espressione, mantenendo invariato il suo indice matematico di data (ad esempio, dettagli del cliente) per ogni data. date_math_expr contiene un'espressione matematica, che determina dinamicamente la data e l'ora come now-2d. date_format contiene il formato per scrivere la data negli indici come YYYY.MM.dd. Se oggi è il 30 dicembre 2015, <accountdetail- {now-2d {YYYY.MM.dd}}> restituirà accountdetail-2015.12.28.

espressioneanalizzato in
<accountdetail-{now-d}>accountdetail-2015.12.29
<accountdetail-{now-M}>accountdetail-2015.11.30
<accountdetail-{now{YYYY.MM}}>accountdetail-2015.12

Ora, vedremo alcune opzioni comuni fornite da Elasticsearch che possono essere utilizzate per ottenere risposte in un formato specifico.

Risultato ottimizzato

Possiamo aggiungere i parametri di ricerca dell'URL (ovvero pretty = true) per ottenere una risposta in un oggetto JSON ben formatto.

POST /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"
   }
}
………………….

Output leggibile dall'uomo

Questa opzione può modificare la visualizzazione delle statistiche in formato leggibile dall'uomo (se human = true) o in formato leggibile dal computer (se human = false). Ad esempio, se human = true, allora distance_kilometer = 20KM; se human = false, allora distance_meter = 20000, in questo caso è necessario utilizzare altri programmi informatici per utilizzare la risposta.

响应过滤

通过将它们添加到field_path参数中,我们可以过滤对较少字段的响应。例如,

POST /schools/_search?filter_path = hits.total

请求正文

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

响应

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