Я возвращаю результат с аспектом из SOLR 6.4.1, где моя цель состоит в том, чтобы:
Потому что я хочу отобразить имя (например, «черный») как фасет с количеством результатов, И создать ссылку, которая впоследствии будет фильтровать его.
например.:
/ Поиск? Dial_id = 48
Причиной этого является то, что я не хочу создавать URL, как это:
/ Поиск? Наберите = Грюн
На данный момент это выглядит так:
<lst name="dial">
<int name="Rot">5</int>
<int name="Grün">4</int>
</lst>
Создано с помощью PHP:
foreach($this->setFacet AS $facet) $this->query->addFacetField(''.$facet.'');
Явно отсутствует идентификатор
Мой код для получения в настоящее время выглядит так:
function facete_dial(){
foreach( $this->response->facet_counts->facet_fields->dial AS $dial => $count){
$this->dial_facetes[$dial] = $count;
}
return $this->dial_facetes;
}
Успешно вернуть цвет и количество результатов.
Как я могу добавить dial_id к фасету, чтобы получить его позже? Или есть лучший подход к этой задаче?
Прямым решением было бы создать вторичное поле — с комбинированным значением как отображаемого значения, так и dial_id
, в сочетании с разделителем между ними.
То есть индексировать значение 48|Grün
тогда делай list($dial_id, $dial_name) = explode('|', $facet_name)
в вашем коде PHP.
Поскольку фасетирование — это «сколько разных токенов и их количество существует в это поле«нет никакой корреляции между различными полями и их значениями.
Создание объединенного поля с последующим извлечением значений из этого поля решает эту проблему.
Другой вариант — выполнить вторичный поиск dial_id => dial_name
информация, например, в MySQL или в хранилище ключей / значений. Или, если информация обновляется редко, генерируйте файл PHP / JSON с ассоциативным массивом каждый раз, когда он обновляется, и включайте / читайте его в своем приложении, чтобы разрешить идентификаторы в именах.
Других решений пока нет …