Запрос с отношением в 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'}}
Я не знаю лучший способ сделать это. На данный момент, мои варианты:
- Сделайте эту окончательную структуру в коде;
- Создайте две коллекции в Solr, Product и Category и смоделируйте соединение, чтобы смонтировать этот окончательный ответ.
Я действительно новичок в Solr, поэтому я немного растерялся.
Кстати, я использую солнечные ожоги в своем приложении Flask.
1 ответ
Я хочу избегать симуляции соединения с Solr, так как это потребует нескольких обходов Solr для получения информации. Это, однако, возможное решение, но требует большей логики приложения (я бы предпочел использовать Solr для поиска, а затем искать информацию из хранилища, поддерживаемого базой данных, если это уже доступно в приложении в этом случае).
У меня есть два предложения, чтобы избежать дополнительной поездки туда и обратно:
Если вам нужно только название категории, определите категории как многозначное поле, содержащее название категории и ничего более. Это позволит вам выполнить запрос к полю и вернет имена категорий для продукта с определенным составом. Если вам нужна только категория, соответствующая запросу, вы можете использовать функцию подсветки, чтобы пометить ее, хотя у меня нет очень хорошего решения для этого (... но действительно ли это необходимо?)
Если вам нужна дополнительная метаинформация о категории (например, идентификатор, имя и т. Д.), Создайте два поля: одно с именем, которое вы ищете, а другое - сериализованное представление JSON категории. Таким образом, вы будете иметь необходимые данные, прикрепленные к документу, а также правильное поле для запроса.
Поиск будет что-то вроде product:Product categories:"Category 1"
или с edismax и более гибким поиском: q=Product Category 1&qf=product categories
- это зависит от того, как вы хотите, чтобы поиск работал.
Недостаток этого решения заключается в том, что если вы измените название категории, вам придется переиндексировать все, что присутствует в категории, чтобы получить обновленное имя для каждого документа. На практике с этим обычно не сложно справиться. Наш производственный бэкэнд поддерживается только Solr, и мы при необходимости переиндексируем данные.