Прелесть поисковой системы Solr в том, что вы можете просто выбрать одно определение схемы, ориентированное либо на продукт, либо на поставщика, а затем использовать возможности Solr для достижения желаемых результатов. Допустим, вы идете с продуктом, ориентированным на продукт, используя следующее:
<field name="product" type="string" indexed="true" stored="true" >
<field name="supplier" type="string" indexed="true" stored="true" multiValue="true">
Теперь вы можете искать продукты, просто выполнив запрос к полю продукта product:my product
, а затем, если вы хотите найти конкретного поставщика, вы можете просто использовать supplier:my supplier
, а поле поставщика - это многозначное поле, связанное с с каждым продуктом вы получите все продукты, с которыми связан этот поставщик.
Другим вариантом для большей гибкости может быть использование поля text
, определенного в примере файла schema.xml, и использование функции 'copyfield
для копирования значений как поставщика, так и продукта в одно поле, после чего вы можете выполнить поиск в нем. либо получит все документы, которые соответствуют запросу в поле поставщика или продукта.
Вот пример, все еще использующий поля, определенные выше.
<field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
<copyField source="product" dest="text" />
<copyField source="supplier" dest="text" />
Тогда, если вы ищете text:my term
, это может быть либо продукт, либо поставщик, и будут возвращены все документы в индексе, соответствующие этому полю. Обратите внимание, что к текстовому полю применяются специальные анализаторы индекса и времени запроса, поэтому вы должны знать, что применяется.
Кроме того, если вам нужно составить список уникальных поставщиков, вы можете использовать Solr Faceting, чтобы получить этот список из всех документов в индексе или относящихся только к текущим критериям поиска.
Для получения более подробной информации по этим темам см. Некоторые из следующих ссылок: