#lucene #solr #indexing #schema
#lucene #solr #индексирование #схема
Вопрос:
Я ищу некоторую помощь и советы о том, как правильно спроектировать схему индексирования документов для моей ситуации. В основном у меня есть продукты, которые могут принадлежать к нескольким категориям. В этих категориях эти продукты могут быть упорядочены или не упорядочены. В идеале я хотел бы сохранить только один уникальный документ для каждого продукта.
Я использую 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"
}
У меня возникли проблемы с categorySequence. Это многозначное поле, которое содержит строки, отформатированные с идентификатором категории и последовательностью моего продукта в пределах этого идентификатора категории, разделенных тире. В тех случаях, когда продукт не упорядочен в категории, я произвольно добавил «noseq».
Поскольку мой продукт может существовать в нескольких категориях, я выполняю запрос фильтра в поле categorySequence следующим образом:
fq=categorySequence:123-*
который помогает мне возвращать только те продукты, которые находятся в категории с идентификатором «123».
Однако моя проблема сейчас, как я обнаружил, заключается в том, что вы не можете сортировать по многозначным полям. Изначально я надеялся, что это будет быстрый способ сортировки отфильтрованных продуктов в соответствующей последовательности.
Я видел здесь несколько других предложений, касающихся группировки и наличия нескольких документов для одного и того же продукта. Однако мои продукты могут существовать во множестве категорий и, как вы можете себе представить, создадут много документов.
Я надеюсь придерживаться одного документа, представляющего один продукт. Может кто-нибудь помочь мне указать правильное направление? Я предполагаю, что я в основном смотрю на выполнение фильтра и сортировки по двумерному полю?
Ответ №1:
Столкнулся с аналогичной проблемой, и вот что мы реализовали —
- Создайте динамическое поле для каждого продукта, включающее идентификатор продукта и последовательность сортировки.
Поле —
<dynamicField name="*_sort_seq" type="string" indexed="true" stored="false" sortMissingLast="true"/>
данные, переданные в Solr —
123_sort_seq=1
456_sort_seq=7
-
Не нужно хранить документы без какой-либо последовательности сортировки. Их позиции можно обрабатывать с помощью атрибутов sortMissingLast и sortMissingFirst.
-
Эти поля будут сохранять положение / последовательность продуктов для категорий.
-
Поскольку вы знаете идентификатор категории, вы можете легко фильтровать и сортировать по продуктам.
fq=categorySequence:123-*amp;sort=123_sort_seq asc
-
Не нужно будет поддерживать несколько копий продуктов.
Комментарии:
1. Это определенно более краткий путь, спасибо за такой подход!