Elasticsearch - Konwencje API

Interfejs programowania aplikacji (API) w sieci WWW to grupa wywołań funkcji lub innych instrukcji programistycznych w celu uzyskania dostępu do komponentu oprogramowania w tej konkretnej aplikacji internetowej. Na przykład interfejs API Facebooka pomaga programiście tworzyć aplikacje, uzyskując dostęp do danych lub innych funkcji z Facebooka; może to być data urodzenia lub aktualizacja statusu.

Elasticsearch udostępnia REST API, do którego dostęp uzyskuje się przez JSON przez HTTP. Elasticsearch używa pewnych konwencji, które teraz omówimy.

Wiele indeksów

Większość operacji, głównie wyszukiwania i innych operacji, w interfejsach API dotyczy jednego lub więcej niż jednego indeksu. Pomaga to użytkownikowi wyszukiwać w wielu miejscach lub we wszystkich dostępnych danych, wykonując zapytanie tylko raz. Do wykonywania operacji na wielu indeksach używa się wielu różnych notacji. Omówimy kilka z nich w tym rozdziale.

Notacja oddzielona przecinkami

POST /index1,index2,index3/_search

Treść żądania

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

Odpowiedź

Obiekty JSON z index1, index2, index3 zawierające any_string.

_all Słowo kluczowe dla wszystkich indeksów

POST /_all/_search

Treść żądania

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

Odpowiedź

Obiekty JSON ze wszystkich indeksów i mające w sobie any_string.

Symbole wieloznaczne (*, +, -)

POST /school*/_search

Treść żądania

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

Odpowiedź

Obiekty JSON ze wszystkich indeksów, które zaczynają się od szkoły zawierającej CBSE.

Alternatywnie możesz również użyć następującego kodu -

POST /school*,-schools_gov /_search

Treść żądania

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

Odpowiedź

Obiekty JSON ze wszystkich indeksów, które zaczynają się od słowa „school”, ale nie pochodzą od słowo „school_gov” i zawierają w sobie CBSE.

Istnieją również parametry ciągu zapytania URL -

  • ignore_unavailable- Żaden błąd nie wystąpi lub żadna operacja nie zostanie zatrzymana, jeśli jeden lub więcej indeksów obecnych w adresie URL nie istnieje. Na przykład indeks szkół istnieje, ale księgarnie nie istnieją.

POST /school*,book_shops/_search

Treść żądania

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

Treść żądania

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

Rozważ następujący kod -

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

Treść żądania

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

Odpowiedź (brak błędu)

Obiekty JSON ze wszystkich indeksów, które zaczynają się od szkoły zawierającej CBSE.

allow_no_indices

truewartość tego parametru zapobiegnie błędom, jeśli adres URL z symbolem wieloznacznym nie będzie zawierał żadnych indeksów. Na przykład nie ma indeksu zaczynającego się od school_pri -

POST /schools_pri*/_search?allow_no_indices = true

Treść żądania

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

Odpowiedź (brak błędów)

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

expand_wildcards

Ten parametr decyduje o tym, czy symbole wieloznaczne mają zostać rozszerzone na indeksy otwarte lub indeksy zamknięte, czy też wykonać jedno i drugie. Wartość tego parametru może być otwarta i zamknięta lub żadna i wszystkie.

Na przykład zamknij szkoły indeksowe -

POST /schools/_close

Odpowiedź

{"acknowledged":true}

Rozważ następujący kod -

POST /school*/_search?expand_wildcards = closed

Treść żądania

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

Odpowiedź

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

Obsługa daty w nazwach indeksów

Elasticsearch oferuje funkcję wyszukiwania indeksów według daty i czasu. Musimy podać datę i godzinę w określonym formacie. Na przykład accountdetail-2015.12.30, index przechowuje szczegóły konta bankowego z 30 grudnia 2015 r. Aby uzyskać szczegółowe informacje na temat określonej daty lub zakresu dat i godzin, można wykonać operacje matematyczne.

Format nazwy indeksu matematycznego daty -

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

static_name to część wyrażenia, która pozostaje taka sama w każdym indeksie matematycznym daty, podobnie jak szczegóły konta. date_math_expr zawiera wyrażenie matematyczne, które dynamicznie określa datę i godzinę, tak jak teraz-2d. date_format zawiera format, w jakim data jest zapisywana w indeksie, np. RRRR.MM.dd. Jeśli dzisiejszą datą jest 30 grudnia 2015 r., <Accountdetail- {now-2d {YYYY.MM.dd}}> zwróci accountdetail-2015.12.28.

Wyrażenie Rozwiązuje się
<accountdetail- {now-d}> accountdetail-2015.12.29
<accountdetail- {now-M}> accountdetail-2015.11.30
<accountdetail- {now {YYYY.MM}}> accountdetail-2015.12

Zobaczymy teraz niektóre typowe opcje dostępne w Elasticsearch, których można użyć do uzyskania odpowiedzi w określonym formacie.

Dość wyniki

Możemy uzyskać odpowiedź w dobrze sformatowanym obiekcie JSON, po prostu dołączając parametr zapytania URL, tj. Pretty = true.

POST /schools/_search?pretty = true

Treść żądania

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

Odpowiedź

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

Wyjście czytelne dla człowieka

Ta opcja może zmienić odpowiedzi statystyczne na postać czytelną dla człowieka (jeśli człowiek = prawda) lub formę czytelną dla komputera (jeśli człowiek = fałsz). Na przykład, jeśli human = true to distance_kilometer = 20KM, a jeśli human = false, to distance_meter = 20000, gdy odpowiedź musi być wykorzystana przez inny program komputerowy.

Filtrowanie odpowiedzi

Możemy filtrować odpowiedź na mniej pól, dodając je w parametrze field_path. Na przykład,

POST /schools/_search?filter_path = hits.total

Treść żądania

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

Odpowiedź

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