Solr 5 – JSON API, część pierwsza

Solr 5 wprowadził wiele zmian do świata Solr, zarówno w kwestii API, jak i samych funkcjonalności. Jedną z wprowadzonych nowości było wprowadzenie API opartego o JSON pozwalającego na zadawanie zapytań w sposób trochę bardziej przyjazny człowiekowi, przynajmniej porównując do długich zapytań opartych o zapytania URI. W tym poście postaramy przybliżyć możliwości korzystania z tego API.


Zadawanie zapytań

Jestem pewien, że wiesz jak zadaje się zapytania do Solr, tak jak jesteśmy przyzwyczajeni. Zatem, aby dostać dokumenty, które mają term solr w polu _text_ moglibyśmy użyć następującej komendy:

curl -XGET 'localhost:8983/solr/gettingstarted/select?q=_text_:solr&indent=true'

Gwoli wyjaśnienia – korzystam z jednego z przykładów dostarczonych wraz z Solr (schemaless), a zaindeksowane dane to dokumenty znajdujące się w katalogu docs dostarczanym razem z Solr.

Oczywiście, powyższe zapytanie można zadać także używając JSON API. Aby Solr zwrócił nam dokładnie te same wyniki wyszukiwania, które dostaliśmy w przypadku zapytania powyżej, skorzystalibyśmy z następującej komendy:

curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr"
}'

Przyjemne i proste – jak widać, wszystko co musimy zrobić, to przekazać obiekt JSON jako payload żądania, który będzie posiadał pole query, za pomocą którego przekazujemy nasze zapytanie. Taki obiekt wysłaliśmy do handlera /query ze względu, że skonfigurowany jest, aby domyślnie odpowiadać w formacie JSON. Oczywiście moglibyśmy skorzystać z handlera /select, ale wtedy odpowiedź zwrócona zostałaby w formacie XML.

Jeżeli chodzi o zadawanie zapytań, to zamiast przekazywania obiektu JSON, możemy przekazać standardowe parametry. Dokładnie tak, nie musimy przekazywać ich jako parametrów URI, ale w ciele żądania:

curl -XGET 'localhost:8983/solr/gettingstarted/query' -d 'q=_text_:solr'

Tym razem, nie mamy obiektu JSON. Standardowy parametr q został przekazany w ciele żądania i przesłany do handlera /query. Jeżeli chcemy przekazać więcej parametrów oddzielamy je znakiem &.

Stronnicowanie

Oczywiście, korzystając z JSON API możemy także kontrolować stronicowanie. W tym celu korzystamy z dwóch parametrów – limit oraz offset. Pierwszy z nich, limit definiuje maksymalną liczbę dokumentów jaką Solr może zwrócić. Parametr offset odpowiedzialny jest za określenie od którego dokumentu wyniki wyszukiwania mają być pokazywane. Na przykład, aby dostać maksymalnie 20 dokumentów zaczynając od jedenastego wykorzystalibyśmy następujące zapytanie:

curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "limit":20,
 "offset":10
}'

Sortowanie

Kolejna rzecz to możliwość sortowania wyników wyszukiwania – oczywiście, także dostępna. Aby posortować nasze wyniki wyszukiwania na podstawie pola o nazwie id malejąco użylibyśmy następującego zapytania:

curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "sort":"id desc"
}'

Jak widać definicja sortowania jest taka sama, jak w przypadku sortowania w kiedy korzystamy z parametrów URI i parametru sort.

Filtrowanie

Na koniec zostawiliśmy sobie filtrowanie. Do filtrowania wykorzystujemy właściwość filter obiekty JSON przesyłanego w ciele żądania. Na przykład zapytanie zawężąjące wyniki wyszukiwania tylko do tych dokumentów, które mają wartość text/html w polu content_type wyglądałoby następująco:

curl -XGET 'localhost:8983/solr/gettingstarted/query' -d '{
 "query":"_text_:solr",
 "filter":"content_type:text/html"
}'

Co dalej?

Jak widać, JSON API w Solr jest bardzo przyjemne i proste w wykorzystaniu pozwalając nam na definiowanie zapytań z pewną strukturą. W następnym wpisie postaramy się przybliżyć kolejną możliwość JSON API, czyli faceting. Postaramy się pokazać różnice pomiędzy starą implementacją obecną w Solr już od bardzo dawna, a nową, wprowadzoną stosunkowo niedawno.

This post is also available in: angielski

This entry was posted on poniedziałek, Grudzień 21st, 2015 at 11:41 and is filed under Solr. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.