Как отфильтровать / отсортировать секвенированный документ, принадлежащий нескольким категориям в Solr, без группировки? - PullRequest
0 голосов
/ 13 октября 2011

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

Я использую Solr 3.4.0, и в настоящее время у меня есть документы с такой структурой:

{
    productId : "1",
    sku : "ABC123",
    productName : "My Product",
    categorySequence : ["123-1", "456-7", "789-noseq", "000-noseq"],
    description : "Product description",
    rating: "4.36"
}

У меня проблемы.Это поле с несколькими значениями, которое содержит строки, отформатированные с помощью идентификатора категории и последовательности моего продукта в этом идентификаторе категории, разделенных тире.В тех случаях, когда продукт не упорядочен в категории, к которой я произвольно добавил "noseq".

Поскольку мой продукт может существовать в нескольких категориях, я выполняю запрос фильтра в поле categorySequence, например:

fq=categorySequence:123-*

, который работает для меня, чтобы вернуть только продукты, которые находятся в категории с идентификатором "123".

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

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

Я надеюсь придерживаться одного документа, представляющего один продукт.Может ли кто-нибудь помочь направить меня в правильном направлении?Я предполагаю, что в основном смотрю на создание фильтра и сортировку в двумерном поле?

1 Ответ

1 голос
/ 13 октября 2011

Столкнулся с аналогичной проблемой, и вот что мы реализовали -

  1. Создать динамическое поле для каждого продукта, включающее идентификатор продукта и последовательность сортировки.

Поле -

<dynamicField name="*_sort_seq"  type="string"  indexed="true"  stored="false"  sortMissingLast="true"/> 

данные, передаваемые в Solr -

123_sort_seq=1
456_sort_seq=7
  1. Не нужно хранить единицы без какой-либо последовательности сортировки. Их позиции можно обрабатывать с помощью атрибутов sortMissingLast & sortMissingFirst.

  2. В этих полях будет сохраняться позиция / последовательность товаров для категорий.

  3. Поскольку вы знаете идентификатор категории, вы можете легко фильтровать и сортировать товары.

    fq = categorySequence: 123 - * & sort = 123_sort_seq asc

  4. Не нужно хранить несколько копий продуктов.

...