Articles

Elasticsearch – Query DSL

Ogłoszenia

W Elasticsearch wyszukiwanie odbywa się za pomocą zapytań opartych o JSON. Zapytanie składa się z dwóch klauzul –

  • Klauzule zapytania liściastego – Klauzule te są dopasowaniem, terminem lub zakresem, które szukają określonej wartości w określonym polu.

  • Klauzule zapytania złożonego – Zapytania te są kombinacją klauzul zapytania liściastego i innych zapytań złożonych w celu wydobycia pożądanych informacji.

Elasticsearch obsługuje dużą liczbę zapytań. Zapytanie zaczyna się od słowa kluczowego zapytania, a następnie posiada warunki i filtry wewnątrz w postaci obiektu JSON. Różne typy zapytań zostały opisane poniżej.

Zapytanie Match All

Jest to najbardziej podstawowe zapytanie; zwraca całą zawartość i z wynikiem 1.0 dla każdego obiektu.

POST /schools/_search{ "query":{ "match_all":{} }}

Po uruchomieniu powyższego kodu, otrzymujemy następujący wynik –

{ "took" : 7, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } }, { "_index" : "schools", "_type" : "school", "_id" : "4", "_score" : 1.0, "_source" : { "name" : "City Best School", "description" : "ICSE", "street" : "West End", "city" : "Meerut", "state" : "UP", "zip" : "250002", "location" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Kwerendy pełnotekstowe

Kwerendy te służą do przeszukiwania pełnego tekstu, takiego jak rozdział lub artykuł informacyjny. Zapytanie to działa zgodnie z analizatorem powiązanym z tym konkretnym indeksem lub dokumentem. W tej sekcji omówimy różne typy zapytań pełnotekstowych.

Kwerenda dopasowująca

Kwerenda ta dopasowuje tekst lub frazę do wartości jednego lub więcej pól.

POST /schools*/_search{ "query":{ "match" : { "rating":"4.5" } }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak pokazano poniżej –

{ "took" : 44, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.47000363, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Multi Match Query

To zapytanie dopasowuje tekst lub frazę do więcej niż jednego pola.

POST /schools*/_search{ "query":{ "multi_match" : { "query": "paprola", "fields": } }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak pokazano poniżej –

{ "took" : 12, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.9808292, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } } ] }}

Query String Query

To zapytanie wykorzystuje parser zapytań oraz słowo kluczowe query_string.

POST /schools*/_search{ "query":{ "query_string":{ "query":"beautiful" } }} 

Po uruchomieniu powyższego kodu otrzymujemy odpowiedź jak pokazano poniżej –

{ "took" : 60, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" },………………………………….

Term Level Queries

Te zapytania dotyczą głównie danych strukturalnych, takich jak liczby, daty i enumy.

POST /schools*/_search{ "query":{ "term":{"zip":"176115"} }}

Po uruchomieniu powyższego kodu, otrzymamy odpowiedź jak poniżej –

……………………………..hits" : , } }] …………………………………………..

Range Query

Kwerenda ta służy do znalezienia obiektów posiadających wartości pomiędzy podanymi zakresami wartości. W tym celu musimy użyć operatorów takich jak –

  • gte – greater than equal to
  • gt – greater-than
  • lte – less-than equal to
  • lt – less-than

Na przykład,

POST /schools*/_search{ "query":{ "range":{ "rating":{ "gte":3.5 } } }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak poniżej –

{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Istnieją również inne typy zapytań na poziomie terminów, takie jak –

  • KwerendaExists – Jeśli określone pole ma wartość non null.

  • Kwerenda Missing – Jest to zapytanie zupełnie odwrotne do zapytania exists, zapytanie to wyszukuje obiekty bez określonych pól lub pola posiadające wartość null.

  • Kwerenda typuildcard lub regexp – Ta kwerenda używa wyrażeń regularnych do znalezienia wzorców w obiektach.

Kwerendy złożone

Kwerendy te są zbiorem różnych kwerend połączonych ze sobą poprzez użycie operatorów logicznych takich jak and, or, not lub dla różnych indeksów lub posiadających wywołania funkcji itp.

POST /schools/_search{ "query": { "bool" : { "must" : { "term" : { "state" : "UP" } }, "filter": { "term" : { "fees" : "2200" } }, "minimum_should_match" : 1, "boost" : 1.0 } }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak pokazano poniżej –

{ "took" : 6, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 0, "relation" : "eq" }, "max_score" : null, "hits" : }}

Kwerendy geo

Kwerendy te dotyczą lokalizacji geo i punktów geo. Zapytania te pomagają znaleźć szkoły lub inne obiekty geograficzne w pobliżu dowolnej lokalizacji. Należy użyć typu danych geo point.

PUT /geo_example{ "mappings": { "properties": { "location": { "type": "geo_shape" } } }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak pokazano poniżej –

{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "geo_example"}

Teraz umieszczamy dane w indeksie utworzonym powyżej.

POST /geo_example/_doc?refresh{ "name": "Chapter One, London, UK", "location": { "type": "point", "coordinates": }}

Po uruchomieniu powyższego kodu, otrzymujemy odpowiedź jak poniżej –

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *