2016-02-29 25 views
5

chcę rozwiązać problem związany z sortowania na podstawie produktów w kategoriach:Solr porządek na dynamicznym kolumnie

mam 3 tabele

produktu

|-------id----------|-----name-------| 
|  p1   |  Prod 1 | 
|  p2   |  Prod 2 | 
|  p3   |  Prod 3 | 
|  p4   |  Prod 4 | 
|  p5   |  Prod 5 | 
|-------------------|----------------| 

Kategoria

|-------id----------|-----name-------| 
|  c1   |  Cat 1  | 
|  c2   |  Cat 2  | 
|  c3   |  Cat 3  | 
|  c4   |  Cat 4  | 
|-------------------|----------------| 

Product_Category

|-----prod id-------|-----cat id-----|----score----| 
|  p1   |  c1  |  120  | 
|  p1   |  c2  |  130  | 
|  p2   |  c1  |  150  | 
|  p2   |  c3  |  120  | 
|  p2   |  c2  |  140  | 
|  p3   |  c2  |  180  | 
|  p3   |  c3  |  160  | 
|-------------------|----------------|-------------| 

Oznacza to, że mam produkty wymienione w wielu kategoriach. Mam dynamicznie generować stronę listy dla każdej kategorii przez zapytanie Solr.

Obecnie mój solr doc wygląda

{ 
    product_id:p1, 
    category_id:[c1, c2] 
} 

Wyzwanie Jestem stoi teraz muszę obsługiwać sortowania na podstawie kategorii wagi produktu, czyli listą stronę c1 będą miały produkty P2, P1 w porządku i szczegóły od C3 będzie P3, P2, P1

(kolejność punktów malejąco) Jeśli zmienić schemat podobny do doc wyglądać

{ 
    product_id:p1, 
    category_id:[c1, c2], 
    c1_weight: 120, 
    c2_weight: 130 
} 

ten sposób muszę dodać pole cx_weight do schematu za każdym razem, gdy dodamy nową kategorię, dzięki czemu mogę sortować według pola cx_weight.

Daj mi znać, gdzie mogę użyć mechanizmu sortowania Solr do sortowania według kategorii wagi i nie trzeba zmieniać schematu za każdym razem, gdy dodaję kategorię.

Dzięki Dheerendra

Odpowiedz

2

Dlaczego nie spróbować modelowania swoją SOLR doc jako Product_Category rzędu?

{ 
    product_id:p1, 
    category_id:c1, 
    weight:120 
}, 
{ 
    product_id:p1, 
    category_id:c2, 
    weight:130 
} 

Spowoduje to spełnienie wymagań dotyczących kategorii stron.

Jedynym komplikuje czynniki wydają jeśli szukać jakiegoś atrybutu produktu i trzeba de-powielać w różnych kategoriach (patrz field-collapsing doc do tego)

+0

Powodem jest to produkt ma wiele innych pól będę musiał zapytać o jak ceny, waga, wysyłka za darmo itd. to te pola będą się powtarzać w każdym dokumencie. Generalnie powyższa technika sprawia, że ​​system jest ciężki, gdybym miał produkty 1M w moim systemie i średnio, jeśli produkt może być powiązany z 5 kategoriami, będę miał dokumenty 5M tylko ze względu na zmianę 2 pól, np. Category_id i weight. –

+0

Lucene koduje wartości pól za pomocą tabeli symboli, takich jak magazyn kolumn. Ogólnie rzecz biorąc, powielanie danych nie jest tak problematyczne, jak w przypadku relacyjnej bazy danych. –

+0

Możesz również zajrzeć do funkcji łączenia Solr, aby sprawdzić, czy możesz zrobić prosty Produkt połączony z produktem/kategorią, ale zajmie to trochę więcej pracy. –