2016-02-29 3 views
5

Я хочу, чтобы решить проблему, связанную с сортировкой на основе продуктов в категории:Solr сортировать по динамической колонке

У меня есть 3 таблицы

продукта

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

Категория

|-------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  | 
|-------------------|----------------|-------------| 

Это означает, что у меня есть продукты, перечисленные в нескольких категориях. У меня есть страница генерации списка динамически для каждой категории по запросу solr.

В настоящее время моего Solr документ выглядит

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

Челленджа я столкнулся в настоящее время мне нужно поддерживать сортировку на основе продукции категории веса, т.е. листинга страницы c1 будет иметь продукты p2, p1 в порядке и перечислении с3 будет p3, p2, p1

(убывания количества набранных баллов) Если изменить схему, как Доку выглядеть

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

Таким образом, мне нужно добавить поле cx_weight до схемы каждый раз, когда мы добавляем новую категорию, чтобы я мог сортировать по полю cx_weight.

Дайте мне знать решение, в котором я могу использовать механизм сортировки solr для сортировки по весу категории и не нужно менять схему каждый раз, когда добавляю категорию.

Благодаря Dheerendra

ответ

2

Почему бы не попробовать моделирования ваш Solr документ как PRODUCT_CATEGORY подряд?

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

Это будет поддерживать ваши требования к странице категории.

только усложняя факторы появляются, если вы ищете какой-то атрибут продукта и нужно де-дублировать по категориям (см field-collapsing doc для этого)

+0

Причина в том, продукт имеет много других полей, мне нужно будет запрашивать на как цена, вес, доставка бесплатно и т. д., тогда эти поля также будут повторяться в каждом документе. В общем, описанная выше техника делает систему тяжелой, если у меня есть 1M-продукты в моей системе, и в среднем, если продукт может быть связан с 5 категориями, тогда у меня будет 5M-документы только для двух полей, изменяющих i.e. category_id и weight. –

+0

Lucene кодирует значения полей с таблицей символов, подобной хранилищу столбцов. В общем, дублирование данных не так проблематично, как с реляционной БД. –

+0

Вы также можете посмотреть функциональность соединения Solr, чтобы узнать, можете ли вы сделать простой продукт, связанный с продуктом/категорией, но это займет немного больше работы. –

Смежные вопросы