Перейти к содержимому

Поиск не находит товары - индекс, переиндексация, выдача

Товар есть на сайте, а поиск его не показывает. Разбираем причины по убыванию частоты: почти все они про индекс, а не про сам поиск.

С чего начать

Проверяем, есть ли страница в индексе:

\Bitrix\Main\Loader::includeModule('search');
$res = CSearch::Search(['QUERY' => 'название товара']);
// пустой ответ здесь означает пустой индекс, а не сбой вывода на витрине
while ($row = $res->Fetch()) {
printf("%s %s %s\n", $row['MODULE_ID'], $row['ITEM_ID'], $row['TITLE']);
}
// пустой результат при существующем товаре означает, что его нет в индексе

Поиск ищет по индексу, а не по инфоблокам. Пустая выдача при живом товаре - это почти всегда отсутствие записи в индексе, и разбирать дальше нужно именно его наполнение.

Смотрим, что вообще индексируется:

$res = CSearch::GetList([], ['MODULE_ID' => 'iblock'], ['MODULE_ID', 'PARAM2']);
while ($row = $res->Fetch()) {
printf("инфоблок=%s записей=%s\n", $row['PARAM2'], $row['CNT'] ?? '-');
}
// инфоблок, которого здесь нет, в поиске не участвует вовсе

Индексируются только те инфоблоки, у которых это включено. Каталог, заведённый после настройки поиска, легко остаётся выключенным, и его товары не находятся с первого дня.

Догоняем индекс после массовых изменений:

$step = 100;
$res = CSearch::ReIndexAll(false, 30, ['MODULE_ID' => 'iblock']);
printf("проиндексировано записей: %s\n", $res);
// переиндексация идёт шагами: полный проход на большом каталоге занимает часы
// у внешнего поискового движка причины пустой выдачи свои, но проверка та же

Правки мимо интерфейса в индекс не попадают. Обмен, импорт и скрипты меняют данные напрямую, поэтому после них индекс догоняют переиндексацией, а не ждут, пока он обновится сам.

Причины

  1. Инфоблок не участвует в поиске примерно 30% случаев

    ПризнакНе находится ни один товар этого каталога, включая старые.

    ПроверкаСмотрим настройки инфоблока: включено ли участие в поиске.

    Что делатьВключаем участие в поиске и запускаем переиндексацию этого инфоблока.

  2. Данные изменены мимо событий примерно 25% случаев

    ПризнакСтарые товары находятся, а приехавшие обменом или скриптом - нет.

    ПроверкаСверяем дату последней переиндексации с датой последнего обмена.

    Что делатьСтавим переиндексацию порциями после обмена: полный проход каждый раз слишком дорог.

  3. Нужного поля нет в индексе примерно 20% случаев

    ПризнакТовар находится по названию, но не находится по артикулу или свойству.

    ПроверкаСмотрим список индексируемых свойств у инфоблока.

    Что делатьДобавляем свойство в индексируемые и переиндексируем инфоблок заново.

  4. Страница закрыта правами или неактивна примерно 15% случаев

    ПризнакАдминистратор находит товар, а покупатель - нет.

    ПроверкаПроверяем активность элемента, даты показа и права группы на инфоблок.

    Что делатьВозвращаем активность и права: поиск учитывает их при выдаче результатов.

  5. Запрос не совпадает с индексом примерно 10% случаев

    ПризнакНе находится по части слова или по слову в другой форме.

    ПроверкаПробуем полное слово и проверяем, включена ли морфология для языка.

    Что делатьВключаем морфологию и учим поиск синонимам либо переходим на внешний поисковый движок.

Частые вопросы

Как часто запускать переиндексацию?

После массовых изменений и порциями по расписанию. Полный проход - только после смены настроек индекса.

Почему поиск нашёл, а страница открывается с ошибкой?

В индексе осталась запись об удалённой странице. Такие записи убирает переиндексация или чистка индекса.

Можно ли искать по описанию свойств?

Да, если свойство отмечено как индексируемое. По умолчанию в индекс попадают не все поля.

Когда переходить на внешний поисковый движок?

Когда важны опечатки, синонимы и подсказки на большом каталоге. Штатный поиск на это не рассчитан.

Смежное

Первоисточник