Faceting, eliminowanie filtrów i jak z tego skorzystać?

Podczas codziennej pracy wiele razy widziałem powtarzające się zapytania do Solr różniące się jednym filtrem. Kiedy pytałem się dlaczego tak – odpowiadano mi, że konieczne jest pobranie wyników facetingu, ale dla różnych zawężeń za pomocą filtrów. Jeżeli korzystacie z Solr w wersji 1.4 lub późniejszej to moja propozycja to korzystanie z local params – co to jest i jak z tego skorzystać – ten wpis postara się odpowiedzieć na oba pytania.

Założenia

W celu pokazania jak korzystać z facetingu i local params załóżmy następującą sytuację. Mamy w indeksie cztery pola opisujące dokument:

  • id – unikalny identyfikator,
  • name – nazwa firmy,
  • voivodship – województwo w jakiej znajduje się firma,
  • city – miasto w którym znajduje się firma.

Dla uproszczenia przyjmijmy, iż pola id, voivodship oraz city są typu string. Pole name jest typu text. Pola nie są wielowartościowe, a definicja typów jest taka jak w standardowej dystrybucji Solr.

Cel

Co chcemy uzyskać. Oprócz znalezienia firmy, której nazwa pasuje do wpisanej przez użytkownika fraz, użytkownik podaje także nazwę województwa i miasta. Wszystkie parametry są konieczne do podania – takie uproszczenie, aby przykład był prostszy. Do tego musimy pokazać dwa rodzaje facetingu:

  • miasta w których znajdują się firmy pasujące do wpisanej frazy niezawężone do wybranego województwa,
  • wszystkie województwa w których znajdują się firmy pasujące do wpisanej frazy.

Podejście standardowe

Standardowe podejście mogłoby polegać na wygenerowaniu dwóch zapytań:

q=FRAZA&fq=city:MIASTO&voivodship:WOJEWÓDZTWO
q=FRAZA&facet=true&facet.field=city&facet.field=voivodship

Pierwsze odpowiada za pobranie firm pasujących do wpisanej frazy i zawężonych do wybranego miasta i województwa, natomiast drugie daje nam upragniony faceting bez zawężeń.

Local params

Solr 1.4 przyniósł ciekawą funkcjonalność – local params. W naszym wypadku liczy się to, iż funkcjonalność pozwala na tagowanie i eliminowanie filtrów z facetingu. Powyższe dwa zapytania możemy zamienić na następujące:

q=FRAZA&fq={!tag=tagCity}city:MIASTO&fq={!tag=tagVoivodship}voivodship:WOJEWODZTWO&facet=true&facet.field={!ex=tagCity,tagVoivodship}city&facet.field=!{ex=tagCity,tagVoivodship}voivodship

Jak to działa ?

Po pierwsze dla każdego z filtrów (parametr fq) definiujemy unikalny tag, za pomocą którego będziemy mogli się odwoływać tego filtra. Aby to zrobić stosujemy konstrukcję {!tag=NAZWA_TAGA}.

Następnie dla każdego z pól po których chcemy wykonać faceting dodajemy informacje o tym, które filtry należy wykluczyć. W naszym przypadku chcemy wykluczać oba filtry w obu polach po których robimy faceting. Aby to zrobić stosujemy następującą konstrukcję {!ex=NAZWA_TAGA_1,NAZWA_TAGA_2,…}.

Kilka słów na koniec

Oczywiście funkcjonalność local params to nie tylko faceting i możliwość wykluczania nazwanych filtrów. Obiecuję, że w przyszłości pojawi się kolejny wpis szerzej opisujący możliwości jakie niesie ze sobą ta funkcjonalność Solr wprowadzona w wersji 1.4.

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