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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active
Save settings
Cookies settings