Ответ в теме: Почему не обновляется индекс поиска в 1С при включённых регламентных заданиях?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему не обновляется индекс поиска в 1С при включённых регламентных заданиях? Ответ в теме: Почему не обновляется индекс поиска в 1С при включённых регламентных заданиях?

#35263
bot_avaOdin — Одинэсник
Участник

    Little Darker, привет!

    Автоматическое обновление полнотекстового индекса в 1С может не работать, несмотря на настроенные регламентные задания, по нескольким причинам:

    1. **Отсутствие постоянно запущенного процесса для выполнения регламентных заданий в файловом варианте**
    В файловом варианте 1С регламентные задания выполняются только при запущенном клиентском сеансе, который регулярно вызывает выполнение заданий. Если такой процесс не запущен постоянно (например, не работает обработка с циклическим вызовом `ВыполнитьОбработкуЗаданий()`), задания не будут выполняться автоматически.

    2. **Неправильная настройка расписания регламентных заданий**
    Даже если задания созданы, их расписание может быть настроено некорректно (например, слишком редкий запуск или конфликт времени запуска), из-за чего обновление индекса не происходит своевременно.

    3. **Проблемы с правами и доступом**
    Процедуры обновления индекса требуют определённых прав. Если у пользователя или у процесса, выполняющего задания, нет достаточных прав, обновление не произойдёт.

    4. **Индекс заблокирован или обновляется вручную**
    Если индекс обновляется вручную или заблокирован процессом слияния основного и дополнительного индексов, автоматическое обновление может быть приостановлено.

    5. **Большой объём данных и высокая нагрузка**
    При массовых изменениях данных (перепроведение документов, массовая загрузка) обновление индекса может не успевать за изменениями, и система может приостанавливать автоматическое обновление, чтобы не создавать дополнительную нагрузку.

    6. **Особенности работы полнотекстового поиска**
    Полнотекстовый поиск в 1С состоит из основного и дополнительного индексов. Дополнительный индекс обновляется часто, а слияние с основным — по расписанию (например, ночью). Если слияние не настроено или не выполняется, индекс может быть неактуален.

    7. **Отсутствие обновления индекса в резервных копиях и тестовых базах**
    При восстановлении базы из бэкапа полнотекстовый индекс не восстанавливается, так как хранится вне СУБД. В таких случаях индекс нужно перестраивать вручную или отключать полнотекстовый поиск.

    **Как гарантировать обновление индекса?**

    — В файловом варианте обязательно запустить постоянно работающую обработку, которая вызывает `ВыполнитьОбработкуЗаданий()` с интервалом (например, каждые 3 секунды).
    — В клиент-серверном варианте использовать менеджер кластера серверов 1С, который самостоятельно выполняет регламентные задания по расписанию.
    — Настроить два регламентных задания: одно для частого обновления дополнительного индекса, другое — для слияния индексов в период низкой нагрузки.
    — Следить за правами пользователей и процессами, которые могут блокировать обновление.
    — При массовых операциях временно отключать полнотекстовый поиск или планировать обновление индекса после завершения операций.

    Пример кода процедуры обновления индекса из регламентного задания:

    Процедура ОбновлениеИндекса() Экспорт
        Сообщить("Выполняется процедура обновления индексов для поиска " + ТекущаяДата());
        Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
            Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда
                // 1-й параметр - слияние индексов (ложь - не сливать)
                // 2-й параметр - индексировать только одну порцию данных (истина)
                ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    

    И запуск этой процедуры по расписанию через регламентное задание, а в файловом варианте — через постоянно запущенную обработку с циклическим вызовом `ВыполнитьОбработкуЗаданий()`.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/292828/
    https://helpf.pro/faq/view/1076.html

    База знаний 1С