Aplikacja „sprzedaż samochodów” – Result Grouping, czyli grupowanie wyników wyszukiwania (cz. 6)

W dzisiejszym poście postaramy się dodać do naszej aplikacji sprzedaży samochodów kolejną funkcjonalność, która będzie polegała na grupowaniu wyników wyszukiwania. Wyobraźmy sobie sytuację, że użytkownik chciałby na zapytanie „Audi A4” otrzymać wyniki pogrupowane np. po roku produkcji, tak aby widział po 2-3 wyniki wyszukiwania dla każdego roku. A może grupowanie po zakresach przebiegu auta ? Zajmijmy się tym tematem.

Opis parametrów requestu nowej funkcjonalności

Funkcjonalność grupowania wyników wyszukiwania jest dostępna od wersji solr 3.3. Przyjrzyjmy się podstawowym parametrom requestu, jakich będziemy potrzebowali:

  • group – włącza/wyłącza grupowanie wyników
  • group.field – nazwa pola, po którym chcemy pogrupować wyniki. Musimy zadbać o to aby pole, po którym chcemy grupować (rok produkcji), było w postaci tekstowej i nie było polem wielokrotnym
  • group.query – zapytanie, które użyjemy w celu pogrupowania wyników po zakresie przebiegu auta
  • group.limit – limit wyników wyszukiwania w każdej z grup

Te cztery podstawowe parametry pozwolą nam na zrealizowanie założeń.

Zmiany w schema.xml

Ewentualne zmiany w pliku schema.xml będą polegały na zadbaniu, aby pola, po których chcemy grupować wyniki wyszukiwania, było w postaci „string” lub „text”. Nasze wyniki chcielibyśmy grupować po polu „rok produkcji”. Dla przypomnienia, reprezentacja tego pola w tym momencie wygląda tak:

czyli jest to pole typu całkowitoliczbowego. W celu umożliwienia grupowania po tym polu tworzymy kolejne pole, które będzie odpowiednikiem pola „year”, ale w postaci tekstowej:

i kopiujemy zawartość pola „year” do pola „year_group”:

To praktycznie wszystkie zmiany jakie musimy dokonać w pliku konfiguracyjnym schema.xml.

Przykładowe dane

Stwórzmy teraz przykładowe dane w celu przetestowania nowej funkcjonalności. Załóżmy że mamy próbkę danych aut o marce Audi i modelu A4. Dwa z nich są z rocznika 2002, kolejne dwa z rocznika 2003 oraz jeden z rocznika 2006. Dodatkowo, jedno z aut ma przebieg poniżej 100 000 km, trzy mają przebieg od 100 000 do 199 999 km i jedno auto które ma przebieg co najmniej 200 000 km:

Tworzymy zapytania

Wykorzystując parametry opisane na początku artykułu, tworzymy zapytanie, które zwróci nam wyniki wyszukiwania dla zapytania „Audi A4” pogrupowane po roku produkcji auta:

Jak widać, ograniczyliśmy nasze wyniki wyszukiwania do maksymalnie dwóch w każdej z grup. Wypiszemy sobie w response jedynie te pola, które dadzą nam czytelny obraz identyfikacji dokumentów, czyli identyfikator, przebieg, marka, model oraz rok produkcji. W rezultacie otrzymujemy w response:

Przeanalizujmy sobie odpowiedź. Na dane zapytanie otrzymaliśmy 5 trafień:

Odpowiedź została podzielona na 3 niezależne grupy:

  1. w której znalazły się dwa dokumenty (numFound=”2″), czyli auta z rocznika 2002

  2. w której znalazły się dwa dokumenty (numFound=”2″), czyli auta z rocznika 2003

  3. w której znalazł się jeden dokument (numFound=”1″), czyli auto z rocznika 2006

Zgadza się!

Skonstruujmy teraz zapytanie, które pogrupuje nam wyniki wyszukiwania po zakresie przebiegu samochodu. Zakładamy 3 zakresy:

  1. <0km ; 99999km>
  2. <100000km ; 199999km>
  3. <200000km ; * >

Zapytanie:

Dostajemy odpowiedź:

Ponownie otrzymaliśmy 5 wyników. W pierwszej grupie znalazło się auto o przebiegu 9900 km, w drugiej grupie auta o przebiegach 197000 km, 125000 km oraz 150000 km, a w trzeciej auto o największym przebiegu, czyli 220000 km.
Otrzymaliśmy to co chcieliśmy osiągnąć. Zadanie wykonane.

Podsumowanie

Kolejna funkcjonalność, tym razem związana z grupowaniem wyników wyszukiwania, została dodana do naszej aplikacji sprzedaży samochodów. Zobaczymy jak zareagują na nią klienci 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.