Возможно ли настроить непрерывную синхронную индексацию полнотекстового поиска в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При активной работе пользователей с базой данных часто возникает требование: вновь созданные или отредактированные элементы справочников и документы должны мгновенно находиться через полнотекстовый поиск. Разберем архитектурные особенности встроенного механизма полнотекстового поиска платформы 1С:Предприятие, выясним, почему синхронная индексация не предусмотрена разработчиками платформы, и рассмотрим практические способы минимизации задержки обновления поискового индекса.

Архитектура полнотекстового поиска и причины отсутствия синхронного обновления

Проанализируем, как физически устроен полнотекстовый поиск в платформе 1С:

  1. Файловая структура индекса: Полнотекстовый индекс не является частью таблиц реляционной СУБД (MS SQL, PostgreSQL и др.). Физически он хранится в виде набора служебных файлов в рабочем каталоге кластера серверов 1С.
  2. Двухуровневая модель (основной и дополнительный индексы): Для ускорения работы индекс делится на две части: основной (содержит большой объем обработанных данных) и дополнительный (инкрементальный, куда заносятся свежие изменения). При поиске платформа прозрачно опрашивает обе структуры данных. Для поддержания оптимальной скорости поиска периодически требуется процедура слияния дополнительного индекса с основным.
  3. Блокировки при записи: Модификация файлов индекса требует наложения исключительных блокировок на уровне процессов сервера приложений. Если бы обновление полнотекстового индекса выполнялось синхронно в рамках транзакции записи каждого объекта (документа, элемента справочника или записи регистра), это привело бы к колоссальным задержкам, массовым таймаутам и взаимным блокировкам (deadlock) при одновременной работе пользователей.

Таким образом, асинхронная пакетная индексация — это архитектурное решение платформы, направленное на сохранение высокой производительности и параллельности транзакционной нагрузки (OLTP).

Штатная настройка частого регламентного обновления

Самый надежный и штатный подход к сокращению времени появления данных в поиске — настройка регламентного задания с минимальным интервалом запуска (например, каждые 60 секунд) и управление порциями индексации.

Рассмотрим программные методы менеджера ПолнотекстовыйПоиск, которые используются в регламентных процедурах:


// Процедура регламентного обновления индекса
Процедура ОбновитьИндексПолнотекстовогоПоиска() Экспорт

    // Проверяем, включено ли использование полнотекстового поиска в системе
    Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.НеИспользовать Тогда
        Возврат;
    КонецЕсли;

    // Выполняем инкрементальное обновление индекса порциями
    // Параметры: РазрешитьСлияние (Ложь), Порциями (Истина)
    ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);

КонецПроцедуры

Параметр Порциями позволяет разбить процесс индексации на небольшие кванты, снижая нагрузку на процессор и дисковую подсистему сервера при обработке больших массивов измененных данных.

Для выполнения фонового слияния дополнительного индекса с основным настраивается отдельное регламентное задание, запускаемое реже (например, раз в сутки в период минимальной активности пользователей):


// Процедура регламентного слияния индексов
Процедура СлитьИндексПолнотекстовогоПоиска() Экспорт

    Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.НеИспользовать Тогда
        Возврат;
    КонецЕсли;

    ПолнотекстовыйПоиск.СлитьИндекс();

КонецПроцедуры

Оптимизация состава индексируемых метаданных

Чем меньше служебных данных индексируется, тем быстрее завершается процедура инкрементального обновления. Проанализируем состав метаданных конфигурации:

  1. Откроем дерево метаданных в конфигураторе.
  2. Для каждого объекта (справочника, документа, регистра) проверим свойство ПолнотекстовыйПоиск.
  3. Установим значение Не использовать для тяжелых служебных регистров, вспомогательных таблиц, технической информации и реквизитов, по которым пользователи заведомо не выполняют текстовый поиск (например, GUID, числовые коэффициенты, служебные флаги).

Инфраструктурные способы ускорения индексации

Поскольку операция обновления индекса интенсивно работает с файлами, узким местом часто становится дисковая подсистема сервера 1С. Рассмотрим варианты оптимизации инфраструктуры:

  1. Перенос каталога кластера на NVMe SSD: Размещение рабочего каталога кластера серверов 1С на высокоскоростных накопителях с высокими показателями IOPS значительно сокращает время сброса порций индекса на диск.
  2. Использование RAM-диска: Для высоконагруженных систем размещение файлов индекса полнотекстового поиска на виртуальном диске в оперативной памяти позволяет выполнять инкрементальные обновления практически мгновенно.

Альтернативные подходы: внешние поисковые системы

Если специфика бизнес-процессов требует строгого поиска в реальном времени с развитыми возможностями ранжирования и фильтрации, стандартный механизм 1С заменяют или дополняют специализированными поисковыми движками (такими как Elasticsearch, OpenSearch или Sphinx):

  1. В событиях записи объектов (через подписки на события ПриЗаписи) изменения отправляются в очередь сообщений (RabbitMQ, Apache Kafka) или HTTP-сервис.
  2. Внешний поисковый сервис производит индексацию документа за доли секунды.
  3. Поиск из интерфейса 1С выполняется через REST API поискового движка, возвращая пользователю готовые ссылки на найденные объекты метаданных.
← На главную