Поисковая система Sphinx индексирует все типы данных, являющиеся дочерними к типу данных "Раздел сайта".
Индексации подлежат следующие поля этих типов данных: 'title', 'h1', 'meta_keywords', 'meta_descriptions', 'content', 'tags', 'is_unindexed', 'readme', 'anons', 'description', 'descr', 'message', 'question', 'answers'. Эти поля нельзя исключить из индексации.
Весовые коэффициенты первых шести типов полей настраиваются через административный интерфейс.
Настройка весовых коэффициентов
Чтобы указать весовые коэффициенты для остальных полей, необходимо выполнить следующее:
- В файле classes/modules/search/custom_events.php добавить слушатель события sphinxExecute.
<?php new UmiEventListener("sphinxExecute", "search", "customSphinxExecute");?>
- В файле classes/modules/search/__custom_adm.php добавить метод
customSphinxExecute()
- обработчик события sphinxExecute.
<?php abstract class __search_custom_admin { public function customSphinxExecute(iUmiEventPoint $event) { if($event->getMode() == 'before') { $sphinx = $event->getParam('sphinx'); if ($sphinx instanceof SphinxClient) { $fieldWeights = array( 'anons' => 10 ); $sphinx->setFieldWeights($fieldWeights); } } } }; ?>
В массив $fieldWeights передаются пары значений "имя_поля" => "вес", далее у объекта sphinx вызывается метод setFieldWeights()
, который задает значения перечисленных полей. Указанные весовые коэффициенты будут применяться при каждом поисковом запросе.
Добавление кастомных полей
Чтобы добавить в конфигурацию Sphinx поля, не входящие в список, указанный выше, необходимо выполнить следующее:
- В файле classes/modules/search/custom_events.php добавить слушатель события sphinxCreateView.
<?php new UmiEventListener("sphinxCreateView", "search", "customCreateView"); ?>
- В файле classes/modules/search/__custom_adm.php добавить метод
customCreateView()
- обработчик события sphinxCreateView.
<?php abstract class __search_custom_admin { public function customCreateView(iUmiEventPoint $event) { if($event->getMode() == 'before') { $contentIndex = $event->getRef('contentIndex'); if ($contentIndex instanceof SphinxIndexGenerator) { $types = umiObjectTypesCollection::getInstance(); $pagesType = $types->getSubTypesList($types->getType('root-pages-type')->getId()); $indexFields = array( 'custom_f1' ); $contentIndex->addPagesList($pagesType, $types, $indexFields); } } } }; ?>
В массив $indexFields передается список полей, которые нужно добавить к индексированию. Далее у объекта contentIndex вызывается метод
addPagesList()
, который добавляет новые поля к списку. После выполнения этого обработчика события необходимо повторно сгенерировать конфигурацию плоской таблицы в административном интерфейсе модуля "Поиск".