Solr: фасетировать одно поле с двумя выходами

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

Теперь я хочу получить все категории из Solr и отобразить их с кликабельными ссылками для пользователя, не обращаясь к базе данных снова. Во время индекса я получаю постоянные ссылки для каждой категории из базы данных MySQL, которая хранится в виде поля с несколькими значениями. taxon_permalinks, Для создания ссылок на продукты мне нужен понятный человеку формат категории и ее постоянная ссылка (в противном случае у вас будут такие уродливые URL-адреса в вашем браузере, когда вы просто используете простое читабельное имя категории, например%20 для пробела),

Когда я делаю поиск фасетов с http://localhost:8982/solr/default/select?q=*%3A*&rows=0&wt=xml&facet=true&facet.field=taxon_namesЯ получаю список читаемых человеком таксонов с их количеством. Основываясь на этом списке, я хочу создать ссылки, чтобы мне больше не приходилось обращаться к базе данных.

Итак, возможно ли получить соответствующие постоянные ссылки из Solr для разных категорий? Например, я получаю XML, как это:

<response>
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
</lst>
<result name="response" numFound="6580" start="0"/>
  <lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
  <lst name="taxon_names">
    <int name="Books">2831</int>
    <int name="Music">984</int>
      ...
  </lst>
</result>

И внутри taxon_names массив мне нужно имя постоянной ссылки.

Возможно, это возможно, определив тип настраиваемого поля в XML-файле конфигурации. Но для этого мне не хватает опыта с Solr.

1 ответ

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

Запрос:

 http://localhost:8982/solr/default/selectq=*%3A*&rows=0&wt=xml
   &facet=true&facet.field=taxon_names&facet.field=taxon_permalink

Ваш вывод должен выглядеть примерно так:

<response>
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
</lst>
<result name="response" numFound="6580" start="0"/>
  <lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
  <lst name="taxon_names">
    <int name="Books">2831</int>
    <int name="Music">984</int>
      ...
  </lst>
  <lst name="taxon_permalink">
    <int name="permalink1">2831</int>
    <int name="permalink2">984</int>
      ...
  </lst>
</result>
Другие вопросы по тегам