Aplikacja „sprzedaż samochodów” – Result Grouping, dodanie kolejnych dwóch parametrów (cz. 7)

W poprzednim poście z tej serii opisaliśmy funkcjonalność grupowania wyników wyszukiwania. Dzisiaj chciałbym pokazać jak łatwo możemy ustalić ilość wygenerowanych grup i jak sortować dokumenty wewnątrz grupy.

Specyfikacja wymagań

Chciałbym stworzyć zapytanie grupujące, które w odpowiedzi pokaże mi ilość wygenerowanych grup, oraz dostarczy po jednym dokumencie w każdej grupie – dokumencie określającym auto o najniższej cenie w swojej grupie rocznikowej.

Opis parametrów requestu nowej funkcjonalności

Potrzebujemy następujących parametrów:

  • group.ngroups – parametr typu logicznego, który pozwoli nam na zawarcie w odpowiedzi ilości wygenerowanych grup
  • group.sort – parametr opisujący sposób sortowania dokumentów wewnątrz grupy

Tworzymy zapytanie

Posługując się zapytaniem z poprzedniego postu, dodajemy dwa nowe parametry:

?q=audi+a4&group=true&group.field=year_group&group.limit=1&fl=id,mileage,make,model,year,price&group.ngroups=true&group.sort=price+asc

Zauważmy, że poza dodaniem parametrów group.ngroups oraz group.sort, ustawiliśmy także wartość parametru group.limit na 1 (tak abyśmy otrzymali tylko jeden dokument w każdej grupie) oraz dodaliśmy do parametru fl pole określające cenę auta. W rezultacie otrzymujemy:

<lst name="grouped">
  <lst name="year_group">
    <int name="matches">5</int>
    <int name="ngroups">3</int>
    <arr name="groups">
      <lst>
        <str name="groupValue">2002</str>
        <result name="doclist" numFound="2" start="0">
          <doc>
            <str name="id">3</str>
            <str name="make">Audi</str>
            <int name="mileage">125000</int>
            <str name="model">A4</str>
            <float name="price">21300.0</float>
            <int name="year">2002</int>
          </doc>
        </result>
      </lst>
      <lst>
        <str name="groupValue">2003</str>
        <result name="doclist" numFound="2" start="0">
          <doc>
            <str name="id">2</str>
            <str name="make">Audi</str>
            <int name="mileage">220000</int>
            <str name="model">A4</str>
            <float name="price">27800.0</float>
            <int name="year">2003</int>
          </doc>
        </result>
      </lst>
      <lst>
        <str name="groupValue">2006</str>
        <result name="doclist" numFound="1" start="0">
          <doc>
            <str name="id">5</str>
            <str name="make">Audi</str>
            <int name="mileage">9900</int>
            <str name="model">A4</str>
            <float name="price">32100.0</float>
            <int name="year">2006</int>
          </doc>
        </result>
      </lst>
    </arr>
  </lst>
</lst>

W odpowiedz pojawił nam się nowy element, określający ilość wygenerowanych grup:

<int name="ngroups">3</int>

W każdej grupie rocznikowej mamy po jednym dokumencie, jest to auto o najniższej cenie w swojej grupie. Nie wierzysz ? Przeanalizuj odpowiedzi zawarte w poprzednim poście i porównaj ceny 🙂

Podsumowanie

Był to szybki przegląd dwóch nowych parametrów powiązanych z funkcjonalnością grupowania wyników. Duże podziękowania dla Davida Martina za dostarczenie mi tematu poprzez dyskusję na temat poprzedniego postu 🙂

Dodaj komentarz

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