Filtrowanie zawęża zbiór dokumentów, na których odbywa się przeszukiwanie pełnotekstowe. Podejście takie znacznie poprawia wydajność zapytań. Filtr nie wpływa także na wynik wyszukiwania (pole _score) w zwracanej kolekcji wyników. Przykład poprawnego filtrowanego zapytania, gdzie kolekcja jest najpierw filtrowana, a później odpytana po indeksie:
POST http://localhost:9200/books/book/_search HTTP/1.1 User-Agent: Fiddler Content-Type: application/json Host: localhost:9200 Content-Length: 160 { "query": { "filtered" : { "query" : { "field" : { "author" : "Kaku" } }, "filter" : { "term" : { "year" : 1993 } } } } }
Filtrować można także zawężając przeszukiwany zbiór
POST http://localhost:9200/books/book/_search HTTP/1.1 User-Agent: Fiddler Content-Type: application/json Host: localhost:9200 Content-Length: 331 { "query":{ "filtered":{ "query":{ "term":{ "title":"worlds" } }, "filter":{ "range":{ "year":{ "from":2000, "to":2013 } } } } } }
Sortowanie
Ponieważ ElasticSearch może działać jako zwykła dokumentowa baza danych, musi także wspierać sortowanie zwracanych elementów. Wykorzystujemy do tego pole sort.
POST http://localhost:9200/books/book/_search HTTP/1.1 User-Agent: Fiddler Content-Type: application/json Host: localhost:9200 Content-Length: 156 { "query" : { "match" : { "author" : { "query" : "penrose kaku", "operator" : "or" } } }, "sort" : [ { "price" : "asc" } ] }
Paginacja
Stronnicowanie jest dziś powszechnie stosowaną techniką umożliwiającą przesyłanie danych małymi porcjami. Również ElasticSearch wspiera stronnicowanie za pomocą pól from oraz size.
POST http://localhost:9200/books/book/_search HTTP/1.1 User-Agent: Fiddler Content-Type: application/json Host: localhost:9200 Content-Length: 184 { "query" : { "match" : { "author" : { "query" : "penrose kaku", "operator" : "or" } } }, "sort" : [ { "price" : "asc" } ], "from" : 2, "size" : 2 }
Brak komentarzy:
Prześlij komentarz