Запрос с отношением в Solr

У меня такая ситуация:

{"product": {"name": "Name of Product",
             "categories": [{'name': 'Category 1'}, {'name': 'Category' 2}]}

Это резюме структуры моего документа solr. Когда я собираюсь искать, я всегда буду искать название продукта и категории. Но, если я ищу этот продукт и category = 'Category 1'Я должен вернуть JSON, как это:

{"product": {"name": "Name of Product",
             "categories": {'name': 'Category 1'}}

Я не знаю лучший способ сделать это. На данный момент, мои варианты:

  1. Сделайте эту окончательную структуру в коде;
  2. Создайте две коллекции в Solr, Product и Category и смоделируйте соединение, чтобы смонтировать этот окончательный ответ.

Я действительно новичок в Solr, поэтому я немного растерялся.

Кстати, я использую солнечные ожоги в своем приложении Flask.

1 ответ

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

У меня есть два предложения, чтобы избежать дополнительной поездки туда и обратно:

  1. Если вам нужно только название категории, определите категории как многозначное поле, содержащее название категории и ничего более. Это позволит вам выполнить запрос к полю и вернет имена категорий для продукта с определенным составом. Если вам нужна только категория, соответствующая запросу, вы можете использовать функцию подсветки, чтобы пометить ее, хотя у меня нет очень хорошего решения для этого (... но действительно ли это необходимо?)

  2. Если вам нужна дополнительная метаинформация о категории (например, идентификатор, имя и т. Д.), Создайте два поля: одно с именем, которое вы ищете, а другое - сериализованное представление JSON категории. Таким образом, вы будете иметь необходимые данные, прикрепленные к документу, а также правильное поле для запроса.

Поиск будет что-то вроде product:Product categories:"Category 1" или с edismax и более гибким поиском: q=Product Category 1&qf=product categories - это зависит от того, как вы хотите, чтобы поиск работал.

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

Другие вопросы по тегам