Настройка поиска по сайту - что индексировать, морфология, подсказки
Настраиваем штатный поиск так, чтобы он находил товары по артикулу и в разных падежах, и понимаем, где заканчиваются его возможности.
Решение
Выбираем, что попадает в индекс:
\Bitrix\Main\Loader::includeModule('search');$res = CSearch::GetList([], ['MODULE_ID' => 'iblock'], ['MODULE_ID', 'PARAM2']);while ($row = $res->Fetch()) { printf("инфоблок %s\n", $row['PARAM2']);}// инфоблока нет в списке - его содержимое поиску просто не видноВ индекс попадает только то, что отмечено в настройках инфоблока. Свойства - отдельно: артикул и характеристики индексируются, лишь когда у свойства включён соответствующий признак.
Включаем морфологию:
- модуль поиска с морфологией для русского языка включается в настройках- без него запрос «телефоны» не находит страницу со словом «телефон»- поиск по части слова настраивается отдельно и стоит дороже по нагрузкеБез морфологии поиск сравнивает слова как строки. Покупатель, набравший запрос в другом падеже, получает пустую выдачу, и объясняет это себе отсутствием товара, а не настройками сайта.
Собираем подсказки из запросов:
$res = CSearchStatistic::GetList(['CNT' => 'DESC'], ['>CNT' => 3], ['PHRASE', 'CNT', 'CNT_RESULT']);while ($row = $res->Fetch()) { printf("%s: %s запросов, %s результатов\n", $row['PHRASE'], $row['CNT'], $row['CNT_RESULT']);}// запросы с нулём результатов - готовый список того, чего не хватает каталогуСтатистика запросов полезнее самих подсказок. Частый запрос с пустой выдачей означает либо отсутствующий товар, либо название, которого нет в карточке, и оба случая стоят внимания.
Держим индекс свежим:
$step = CSearch::ReIndexAll(false, 30, ['MODULE_ID' => 'iblock']);printf("проиндексировано записей: %s\n", $step);// полная переиндексация большого каталога идёт часами и ставится по расписаниюПереиндексацию ставят порциями по расписанию, а не запускают руками после каждого обмена. Полный проход по большому каталогу занимает часы, и в рабочее время он заметно мешает сайту.
Выдача учитывает права на страницы и элементы. Администратор, проверяющий поиск под собой, видит не то же самое, что покупатель, и проверять стоит из неавторизованного окна браузера.
Штатный поиск не рассчитан на опечатки и синонимы. Если покупатели ищут по неточным названиям, дешевле подключить внешний поисковый движок, чем добиваться этого от встроенного.
Поиск стоит проверять на настоящих запросах из статистики, а не на придуманных. Разработчик ищет «телефон», а покупатель - «зарядка для айфона 12 оригинал», и результаты у этих запросов разные.
Ожидания от штатного поиска стоит проговорить до работы. Он ищет по словам в индексе и делает это честно, но не угадывает опечатки и не понимает, что «зарядка» и «блок питания» - про одно и то же.
Типичные проблемы
Поиск не находит товар по артикулу.
Свойство с артикулом не отмечено как индексируемое в настройках инфоблока. После правки этих настроек весь инфоблок переиндексируют заново и полностью целиком.
Запрос в другом падеже не даёт результатов.
Морфология для русского языка не включена в настройках модуля поиска. Без морфологии слова сравниваются просто как обычные строки из отдельных символов.
Покупатель не находит то, что видит администратор.
Выдача учитывает права и на страницы, и на отдельные элементы самого каталога. Проверять поиск нужно из неавторизованного окна браузера, а не из своего рабочего.
После обмена поиск отдаёт старые названия.
Индекс не обновился, потому что правки пришли мимо интерфейса. Переиндексацию ставят порциями и по расписанию, а не запускают её каждый раз руками.
Поиск заметно замедляет сайт.
Полная переиндексация идёт в рабочее время и целиком. Её переносят на ночное время и режут всю эту работу на порции.
Частые вопросы
Что вообще стоит индексировать?
Название, артикул и те свойства, по которым ищут покупатели. Описание целиком чаще мешает, чем помогает.
Как узнать, что ищут на сайте?
По статистике поисковых запросов с числом результатов. Запросы с нулём результатов - самое полезное в ней.
Нужен ли поиск по части слова?
Полезен для артикулов и кодов, но заметно нагружает базу. Включают его точечно, а не для всего.
Когда переходить на внешний движок?
Когда важны опечатки, синонимы и подсказки на большом каталоге. Штатный поиск на это не рассчитан.
Смежное
-
Релевантность выдачи: правила сортировки, стоп-слова, вес - как управлять порядком результатов
-
Поиск по сайту на практике - оглавление подтемы
-
Живой поиск с подсказками: выдача, доступность, подстроки - подсказки в поле поиска
-
Поиск не находит товары: индекс, переиндексация, выдача - разбор, когда поиск молчит
-
Рейтинги и голоса за материалы: нормированный голос, авторитет, правила - соседняя подсистема того же раздела
-
Поиск по товарам: индексация, вывод, ограничение по каталогу - поиск именно по каталогу
-
Медленный запрос к базе: поиск, план, индекс - если переиндексация тормозит сайт
-
Модули и решения - устройство модулей целиком
-
Внешний поисковый движок: индекс, запрос, синхронизация - когда штатного поиска уже мало
-
Свои данные в поиске по сайту: индексация, адреса, права - как в индекс попадают чужие данные
-
Sphinx как движок поиска: подключение, индекс, переключение - когда штатного индекса перестаёт хватать