После импорта или ручной правки базы местоположений автодополнение города в оформлении заказа может перестать находить нужные пункты. Причина почти всегда одна — устаревший поисковый индекс. Разбираем, зачем нужна переиндексация, когда её запускать и как довести долгую операцию до конца без сюрпризов.
Зачем вообще нужна переиндексация
Быстрый поиск города в поле оформления заказа работает не по «живой» таблице местоположений, а по отдельному поисковому индексу. Модуль sale хранит нормализованные названия и связи «родитель — потомок» в служебных таблицах b2b_loc_search и b2b_location_name_search (в новой версии API местоположений, Bitrix\Sale\Location). Именно этот индекс отвечает за мгновенное автодополнение, за учёт синонимов и за корректную сортировку подсказок.
Когда вы меняете саму базу — добавляете города, правите названия, импортируете новый набор регионов — записи в основных таблицах обновляются, а индекс остаётся прежним. В результате новые пункты не находятся, а удалённые продолжают появляться в подсказках. Переиндексация пересобирает индекс заново, приводя его в соответствие с текущим состоянием справочника.
Когда запускать
Переиндексация нужна не после каждого действия, а в конкретных ситуациях, когда состав или названия местоположений менялись массово или заметно:
- После импорта базы местоположений — например, загрузки нового пакета городов и регионов через
Магазин → Местоположения → Импорт. Это самый частый повод. - После ручного создания или переименования большого числа пунктов в разделе управления местоположениями.
- После обновления модуля или миграции на новую версию API местоположений (D7), когда меняется структура хранения.
- При жалобах на поиск — город есть в справочнике, но в поле заказа не подсказывается, или наоборот, всплывают уже удалённые пункты.
При точечной правке одного-двух городов Битрикс обычно обновляет индекс сам, и полная переиндексация не требуется. Но если поиск «не видит» изменений — запускайте её вручную.
Где найти кнопку
Управление индексом вынесено в настройки модуля магазина. Путь в административной панели: Магазин → Настройки → Настройки местоположений (или Настройки → Настройки продукта → Настройки модулей → Интернет-магазин, вкладка, связанная с местоположениями). На странице настроек местоположений есть блок обслуживания с кнопкой «Переиндексировать» (в интерфейсе может называться «Восстановить индекс поиска» или «Обновить индекс»).
В проектах, где ещё используется старый механизм местоположений, аналогичная операция доступна на странице импорта — там же, где загружается база, обычно есть опция обновления поискового индекса после загрузки. Ориентируйтесь на текущую версию: если в системе включён новый API (Bitrix\Sale\Location), работайте через настройки местоположений.
sale. Если её нет — проверьте роль в Магазин → Настройки → Группы пользователей и права.Агент и фоновая переиндексация
Полная переиндексация — тяжёлая операция: полная база российских местоположений содержит десятки тысяч пунктов, и пересобрать индекс за один запрос нельзя. Поэтому Битрикс выполняет её порциями. Запуск из интерфейса стартует пошаговый процесс, а фоновое досоздание индекса берёт на себя агент модуля sale.
Чтобы фоновая часть действительно выполнялась, важны два условия:
- Работают агенты вообще — проверьте
Настройки → Настройки продукта → Агенты. Агенты должны запускаться на хитах или, что надёжнее, поcron. - Настроен реальный крон, если сайт малопосещаемый: на «спящем» проекте без хитов агент на хитах не сработает и индекс так и не достроится.
Пока агент не завершил работу, поиск может отдавать неполные результаты — это нормально для середины процесса. Дайте операции доработать до конца.
Долгая операция: как довести до конца
Если индексируемая база большая, переиндексация оформляется как «долгая операция» — со шкалой прогресса и пошаговым дозапросом через ajax. Несколько практических моментов:
| Симптом | Что делать |
|---|---|
| Прогресс замирает | Не закрывайте вкладку до конца; при обрыве запустите переиндексацию повторно — она продолжится, а не начнётся впустую |
| Процесс «отваливается» по таймауту | Проверьте max_execution_time и лимиты веб-сервера; уменьшите размер шага, если он настраивается |
| Ошибка нехватки памяти | Поднимите memory_limit в PHP для админки на время операции |
| Индекс не достраивается в фоне | Убедитесь, что агенты и cron работают (см. предыдущий раздел) |
После завершения имеет смысл сбросить кэш компонентов оформления заказа и проверить автодополнение на нескольких городах — типовом, недавно добавленном и переименованном.
Ускорение автодополнения города
Переиндексация чинит корректность поиска, но на скорость подсказок влияет ещё несколько вещей. Если автодополнение «думает» долго даже на свежем индексе:
- Ограничьте область поиска. Держите в базе только реально нужные типы и уровни — страну, регионы, города. Полный справочник с сёлами и улицами замедляет выборку; лишние уровни лучше не импортировать.
- Используйте группы и привязку к сайту. Если магазин работает по конкретному региону, ограничьте местоположения через группы или привязку сайта — поиск будет идти по меньшему набору.
- Проверьте индексы БД. На больших базах убедитесь, что служебные таблицы поиска не фрагментированы; переиндексация как раз восстанавливает их целостность.
- Кэшируйте компонент. Компонент выбора местоположения кэшируется — не отключайте кэш без необходимости.
Итог
Переиндексация поиска местоположений — короткая, но обязательная операция после любого массового изменения базы городов и регионов. Запускайте её из настроек местоположений после импорта или правок, следите, чтобы фоновый агент и cron доработали процесс до конца, и после завершения проверяйте автодополнение на реальных городах. Для скорости подсказок держите справочник компактным и не отключайте кэш компонента.
Если база местоположений большая, импорт регулярный, а поиск в оформлении заказа должен быть безупречным, мы в B2Bsite настраиваем справочник, автоматизируем переиндексацию по расписанию и ускоряем каталог с корзиной под нужную нагрузку. Поможем довести местоположения и весь оформление заказа до предсказуемой работы.
Частые вопросы
Нужно ли переиндексировать после добавления одного города?
Обычно нет — при точечном добавлении Битрикс обновляет индекс сам. Полная переиндексация нужна после массовых изменений или если новый город не находится в подсказках.
Где именно находится кнопка переиндексации?
В административной панели: Магазин → Настройки → Настройки местоположений, блок обслуживания индекса. В старом механизме аналогичная опция есть на странице импорта базы.
Почему после импорта города не появляются в поиске?
Записи добавились в базу, но поисковый индекс остался прежним. Запустите переиндексацию, чтобы индекс пересобрался и учёл новые пункты.
Сколько длится переиндексация полной базы?
На полной базе местоположений — от нескольких минут до десятков минут, потому что операция идёт порциями. Не закрывайте вкладку до завершения прогресса.
Почему индекс не достраивается сам?
Фоновую часть выполняет агент модуля sale. Если агенты не запускаются по cron или на хитах, индекс останется недостроенным — проверьте настройки агентов.
Что делать, если операция обрывается по таймауту?
Проверьте max_execution_time и memory_limit для админки, при необходимости уменьшите размер шага. После обрыва запустите переиндексацию повторно — она продолжится с прерванного места.
Переиндексация удалит мои местоположения?
Нет. Она пересобирает только служебный поисковый индекс. Сами города, привязки к сайтам и группы остаются без изменений.
Как ускорить автодополнение города?
Держите в базе только нужные уровни и типы, ограничивайте область через группы или привязку к сайту, не отключайте кэш компонента и следите за целостностью индекса.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.