При активной работе пользователей с базой данных часто возникает требование: вновь созданные или отредактированные элементы справочников и документы должны мгновенно находиться через полнотекстовый поиск. Разберем архитектурные особенности встроенного механизма полнотекстового поиска платформы 1С:Предприятие, выясним, почему синхронная индексация не предусмотрена разработчиками платформы, и рассмотрим практические способы минимизации задержки обновления поискового индекса.
Проанализируем, как физически устроен полнотекстовый поиск в платформе 1С:
Таким образом, асинхронная пакетная индексация — это архитектурное решение платформы, направленное на сохранение высокой производительности и параллельности транзакционной нагрузки (OLTP).
Самый надежный и штатный подход к сокращению времени появления данных в поиске — настройка регламентного задания с минимальным интервалом запуска (например, каждые 60 секунд) и управление порциями индексации.
Рассмотрим программные методы менеджера ПолнотекстовыйПоиск, которые используются в регламентных процедурах:
// Процедура регламентного обновления индекса
Процедура ОбновитьИндексПолнотекстовогоПоиска() Экспорт
// Проверяем, включено ли использование полнотекстового поиска в системе
Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.НеИспользовать Тогда
Возврат;
КонецЕсли;
// Выполняем инкрементальное обновление индекса порциями
// Параметры: РазрешитьСлияние (Ложь), Порциями (Истина)
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
КонецПроцедуры
Параметр Порциями позволяет разбить процесс индексации на небольшие кванты, снижая нагрузку на процессор и дисковую подсистему сервера при обработке больших массивов измененных данных.
Для выполнения фонового слияния дополнительного индекса с основным настраивается отдельное регламентное задание, запускаемое реже (например, раз в сутки в период минимальной активности пользователей):
// Процедура регламентного слияния индексов
Процедура СлитьИндексПолнотекстовогоПоиска() Экспорт
Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.НеИспользовать Тогда
Возврат;
КонецЕсли;
ПолнотекстовыйПоиск.СлитьИндекс();
КонецПроцедуры
Чем меньше служебных данных индексируется, тем быстрее завершается процедура инкрементального обновления. Проанализируем состав метаданных конфигурации:
ПолнотекстовыйПоиск.Поскольку операция обновления индекса интенсивно работает с файлами, узким местом часто становится дисковая подсистема сервера 1С. Рассмотрим варианты оптимизации инфраструктуры:
Если специфика бизнес-процессов требует строгого поиска в реальном времени с развитыми возможностями ранжирования и фильтрации, стандартный механизм 1С заменяют или дополняют специализированными поисковыми движками (такими как Elasticsearch, OpenSearch или Sphinx):
ПриЗаписи) изменения отправляются в очередь сообщений (RabbitMQ, Apache Kafka) или HTTP-сервис.