Добавление названия раздела к поисковым данным товара
Чтобы поиск начал искать по названию раздела элемента инфоблока, нужно добавить его к поисковой строке на этапе индексации.
Сделать это можно с помощью события BeforeIndex, которое вызывается перед индексацией элементов.
<?php
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('search', 'BeforeIndex', 'beforeIndexHandler');
function beforeIndexHandler($arFields)
{
if (!CModule::IncludeModule('iblock')) return $arFields;
if ($arFields['MODULE_ID'] == 'iblock'
&& $arFields['PARAM2'] == CATALOG_ID //ID нужного инфоблока
&& substr($arFields['ITEM_ID'], 0, 1) != 'S'
) {
$rsSections = \CIBlockElement::GetElementGroups($arFields['ITEM_ID'], true);
$sectionNames = [];
while ($arSection = $rsSections->Fetch()) {
$sectionNames[] = $arSection['NAME'];
}
// Добавляем названия разделов к поисковому индексу
if (!empty($sectionNames)) {
$arFields['BODY'] .= PHP_EOL . implode(' ', $sectionNames);
$arFields['TITLE'] .= ' [' . implode(', ', $sectionNames) . ']';
}
}
return $arFields;
}
Затем обязательно переиндексируем поиск: Настройки → Поиск → Переиндексация поиска (/bitrix/admin/search_reindex.php), снимаем галочку "Переиндексировать только измененные" и нажимаем "Переиндексировать".
Если у вас много элементов, то переиндексация может занять много времени.
Проверяем, как отрабатывает поиск, теперь он должен будет искать по названию разделов, в которых находится элемент.
Оставьте комментарий
Если эта статья была полезной для вас, оставьте комментарий ниже или задайте интересующий Вас вопрос. Ваш опыт может помочь другим читателям!
Написать комментарий