2012-03-28 11 views
8

Używamy solr do zbudowania aplikacji e-commerce, a my mamy produkty zgrupowane według podkategorii w ramach kategorii nadrzędnej. Używamy dynamicznego porządku sortowania, aby określić, gdzie produkt należy do podkategorii, a ten sam produkt może pojawić się w więcej niż jednej podkategorii. Śledzimy porządek sortowania za pomocą pola dynamicznego, a każdy produkt ma wiele zamówień sortowania w zależności od tego, do ilu podkategorii należy. Musimy pogrupować te produkty w podkategorię i posortować je przy użyciu odpowiedniej kolejności sortowania. Przykład poniżej, każda pomoc będzie bardzo doceniona i staramy się to osiągnąć za pomocą pojedynczego zapytania.Sortowanie różnych grup za pomocą różnych zamówień sortowania w solr

  • dżinsy
    • Bootcut
      • Produkt1
      • Produkt2
    • Kąpiel
      • Produkt1
      • Product3

produkty mają następujący porządek

  • Produkt1-bootcutSortOrder-10 skinnySortOrder-1
  • Produkt2-bootcutSortOrder-3
  • Product3-skinnySortOrder-5

Oczekiwany wynik z uwzględnieniem kolejności sortowania rosnąco pod każdej grupy

  • Bootcut
    • Produkt2
    • Produkt1
  • Kąpiel
    • Produkt1
    • Product3

Chcemy solr sortowanie poszczególnych grup z porządku sortowania - group.query = {podkategorii: Bootcut} & group.sort = bootcutSortOrder asc & group.query = {podkategorii: Skinny} & group.sort = skinnySortOrder asc

Co robi solr to, że sortuje na kombinacji asc bootcutSortOrder, skinnySortOrder asc.

Czy w Solr można sortować każdą sekcję grupy z jej własną kolejnością sortowania?

używamy najnowszej wersji solr, a także z solr 4.

+2

Od tego komentarza w (bieżącego) źródła SOLR - https://github.com/apache/lucene- solr/blob/trunk/solr/core/src/java/org/apache/solr/search/Grouping.java # L295 - i otaczający kod, wydaje się, że fakt, że pojedynczy rodzaj dotyczy wszystkich grup jest uznanym ograniczeniem to jeszcze nie zostało rozwiązane. Jeśli twoje grupy zawierają wszystkie wyniki (nie polegasz na rodzajach, które zwracają prawe górne N), może możesz uzyskać/obliczyć inne wartości sortowania za pomocą pseudo-pola, a następnie ponownie posortować przed wyświetleniem. Wtedy przynajmniej byłaby to jedna kwerenda, zwracająca wszystkie potrzebne dane. – gojomo

Odpowiedz