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 *

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