Как Solr индексировать несколько пользовательских сортировки в зависимости от категории? - PullRequest
0 голосов
/ 05 сентября 2018

Допустим, у нас есть:

  • 3 продукта, prod1 , prod2 и prod3
  • 3 категории, cat1 , cat2 и cat3

продукт может иметь пользовательский порядок / сортировку в каждой категории.

так что уникальные группы, продукт объединен с категорией и категорией, объединенный заказ / сортировка, например ::1010*

--------------------------
|product  |category|order|
|------------------------|
|prod1    |cat1    |3    |
|prod2    |cat1    |1    |
|prod3    |cat1    |2    |
--------------------------
|prod1    |cat2    |1    |
|prod2    |cat2    |2    |
|prod3    |cat2    |3    |
--------------------------
|prod1    |cat3    |2    |
|prod2    |cat3    |3    |
|prod3    |cat3    |1    |
--------------------------

в настоящее время каждый продукт индексируется по всем доступным категориям, например ::

array (
  'id' => 'prod1',
  'type_s' => 'product',
  'categories_ss' => 
  array (
    0 => 'cat1',
    1 => 'cat2',
    2 => 'cat3',
  ),
  ...
  ...
  ...
  'price_i' => 50
)

Я хочу иметь возможность искать все продукты в категории x , отсортированные по индивидуальному заказу. Какое поле solr мне следует использовать для хранения заказов товара внутри каждой категории?

Версия My Solr: 4.10.4

1 Ответ

0 голосов
/ 05 сентября 2018

Поскольку вы пометили этот вопрос Solr4, я настоятельно рекомендую обновить - есть много улучшений производительности для DocValues ​​(и они были добавлены в 4.2, но я предполагаю, что вы по крайней мере на более поздней версии, чем эта). Некоторые из них могут сделать эту стратегию более жизнеспособной.

Создайте динамическое поле с типом int (или long) и с включенным docValues ​​(что должно помочь в использовании памяти для разреженных полей, используемых для сортировки).

<dynamicField name="sort_cat_*" type="int" docValues="true" indexed="true"  stored="true" />

Затем вы добавляете в документ поле с именем, названным в честь категории или идентификатора категории, если это возможно - отказ от специальных символов в именах полей упрощает все. Используйте простую стратегию замены (т.е. измените "foo & bar" на "foo_bar"):

sort_cat_cat1: 2

Затем вы можете использовать это поле для сортировки. Возможно, у вас уже есть поле, по которому вы можете отфильтровать элементы в этой категории.

...