Kilkanaście miesięcy temu podczas jednego z projektów starałem się optymalnie skonstruować zapytania z facetingiem. Problem polegał na tym, że faceting miał był nieograniczany, a samo zapytanie nakładało konieczność ograniczenia filtrem (fq). Niestety wtedy nie było to możliwe bez dodatkowej implementacji i zmian w mechanizmie facetingu. Teraz już jest, właśnie dzięki tzw. LocalParams.
Na początek
LocalParams pozwala na oznaczanie części zapytania przez swój własny znacznik, np:
q=*:*&fq={!tag=miasto}city:warszawa
Solr w znaczniku o nazwie miasto zapamięta, iż dotyczy on filtra o wartości city:warszawa. Załóżmy teraz, że chcemy zadać zapytanie, o wszystkie dokumenty, które mają w polu city wartość warszawa, które jest wielowartościowe. Dodatkowo chcemy, aby Solr pokazał nam, za pomocą facetingu, ilość dokumentów we wszystkich miastach. Nic prostszego, wystarczy użyć parametru {!ex} w facetingu. Można byłoby to zrobić na przykład w taki sposób:
q=*:*&fq={!tag=miasto}city:warszawa&facet=true&facet.field={!ex=miasto}city
Powyższe zapytanie zwróci nam dokumenty, które w polu city mają wartość warszawa oraz wyniki facetingu po polu city, ale nie ograniczonym tych do wartości warszawa, ponieważ wykluczyliśmy ten filtr.
Typ parsera
Oczywiście wykorzystanie LocalParams nie ogranicza się tylko do facetingu. Jednym z ciekawych przykładów jest zmiana typu parsera obsługującego zapytanie. Jeżeli korzystamy np. ze standardowego parsera, możemy zmienić jego typ dla konkretnego zapytania za pomocą takiej konstrukcji:
q={!type=dismax qf=city}warszawa
Powyższe zapytanie wykorzysta dismax query parser, ustawi parametr qf na pole city oraz przekaże do wartość warszawa do parametra q.
Domyślny operator logiczny
Zmiana domyślnego operatora logicznego za pomocą LocalParams jest także bardzo prosta:
q={!q.op=AND}warszawa praga
Powyższe zapytanie użyje operatora logicznego AND dla fraz zawartych w parametrze q, czyli warszawa oraz praga.
Zmiana nazw parametrów
Dodatkowo, za pomocą LocalParams można uzyskać ciekawą funkcjonalność – przekazywanie parametrów. Jeżeli chcemy na przykład wykorzystać własne nazwy parametrów w zapytaniach, możemy zrobić to w następujący sposób:
q={!type=dismax qf=city v=$pmiasto}&pmiasto=warszawa
Solr standardowo nie obsługuje parametru o nazwie pmiasto, ale za pomocą klucza v (oznaczającego wartość) oraz zastosowania operatora referencji $ możliwe było przekazanie wartości z tak nazwanego parametru do zapytania.
Oczywiście wykorzystanie LocalParams nie ogranicza się do przytoczonych przeze mnie przykładów. Polecam, aby każdy kto chce w przyszłości wykorzystywać możliwości oferowane przez Solr w tym względzie poeksperymentował sam, a na pewno można znaleźć ciekawe zastosowania tej funkcjonalności.
Więcej informacji
Aktualne informacje o LocalParams w Solr można znaleźć na wiki pod tym adresem.