Интеграция API поиска Solr с пятизвездочной (или аналогичной) системой рейтинга (fastcet и sort)
Я пытаюсь отсортировать узлы по рейтингу с помощью многогранного поиска Search API с интеграцией Solr. Я уже настроил пятизвездочные рейтинги (около 9 на узел, это большая многоосевая рейтинговая система), но я не могу проиндексировать эти рейтинги!
Может ли кто-нибудь помочь мне понять, как это изменить, чтобы я мог использовать фасетный поиск для оценок?
Иначе, есть ли какие-либо рекомендации по другим модулям (кроме Fivestar), которые позволили бы индексировать голоса?
Спасибо!
Джастин
1 ответ
Сначала вам нужно установить модуль facetapi - это для граней. во-вторых, на hook_update_index необходимо добавить рейтинг в индекс apachesolr
<?php function module_apachesolr_update_index(&$document, $node) {
//add additional offers;
if (count($node->field_add_offers)) {
$field = $node->field_add_offers;
foreach ($field as $lang => $values) {
foreach ($values as $value) {
if (isset($value['value'])) {
$document->setMultiValue('sm_offers', $value['value']);
}
}
}
}
} ?>
Обратите внимание, это всего лишь пример. Я запускаю 2 цикла из-за многоязычного сайта и проблемы с этим ключом "und" в массиве полей. Здесь также вы не можете добавить все рейтинги, но рассчитать, например, один модификатор на узел, который будет использоваться для сортировки (если у вас его нет в рейтингах)
В-третьих, добавьте фасеты с помощью hook_facetapi_facet_info
<?php function module_facetapi_facet_info(array $searcher_info) {
return array(
'sm_games_facet' => array(
'name' => 'sm_games_facet',
'label' => t('games'),
'description' => t('Filter games'),
'field' => 'sm_games',
'field alias' => 'game',
'query type' => 'term',
'default widget' => 'facetapi_links',
'allowed operators' => array(FACETAPI_OPERATOR_OR => TRUE, FACETAPI_OPERATOR_AND => TRUE),
'default sorts' => array(
array('display', SORT_ASC),
),
)
);
} ?>
больше о гранях вы можете найти в файле facetapi.api.php;
Далее - переиндексировать контент и включить фасет в настройках apachesolr.
С уважением, Слава