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