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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35262
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        почему в базах автоматом не обновляется индекс поиска, хотя все регламентные задания настроены?

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С