Как правильно настроить полнотекстовый поиск в 1С: какие поля индексировать, а какие отключить для оптимизации производительности?

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

Полнотекстовый поиск (ППП) в платформе 1С:Предприятие 8 — это мощный инструмент, который позволяет пользователям быстро находить нужную информацию по всей базе данных, используя простые поисковые запросы. По умолчанию при создании новых объектов метаданных (справочников, документов) платформа автоматически включает все их реквизиты в полнотекстовый индекс. Однако на практике такой подход «всё или ничего» приводит к лавинообразному росту объема индекса, перегрузке дисковой подсистемы и замедлению работы сервера приложений.

В этой статье мы подробно проанализируем устройство полнотекстового поиска в 1С, выясним, почему индексация некоторых типов данных вредит системе, и пошагово разберем, какие поля необходимо исключить из поиска для оптимизации производительности.

Где хранятся индексы ППП и почему это критично для администратора?

Перед тем как перейти к настройке полей, давайте разберем физическую механику хранения данных полнотекстового поиска. В отличие от стандартных индексов СУБД (например, MS SQL Server или PostgreSQL), файлы полнотекстового поиска 1С хранятся отдельно от самой базы данных.

Они располагаются в специальном каталоге на сервере приложений 1С — в папке 1cv8ftxt, которая находится внутри каталога описания конкретной информационной базы. Это накладывает определенные обязательства на системного администратора:

  1. Особенности резервного копирования: Если вы выполняете только резервное копирование (бэкап) базы данных средствами СУБД, файлы полнотекстового поиска не попадут в архив. При восстановлении базы на новом сервере индекс придется пересоздавать с нуля, что на крупных информационных базах (объемом в сотни гигабайт) может занять несколько суток.
  2. Дисковое пространство: Размер каталога 1cv8ftxt в неоптимизированных базах может составлять от 10% до 30% от общего объема текстовой информации в СУБД. Главными «пожирателями» свободного места являются длинные строковые поля и файлы (PDF, DOCX, TXT), прикрепленные к объектам базы.

Какие поля действительно стоит исключать из полнотекстового поиска?

Разберем детально, почему индексация всех полей подряд является избыточной. Для оптимизации базы данных нам необходимо отключить полнотекстовый поиск для реквизитов, которые не несут смысловой нагрузки при текстовом поиске.

1. Поля с низкой селективностью (Булево, Перечисления, Статусы)

Рассмотрим реквизиты с типом Булево (например, «Проведен», «ПометкаУдаления», «Услуга») или технические перечисления (например, статус документа «Новый», «В работе», «Закрыт»). Индексация таких полей абсолютно бесполезна. Пользователь практически никогда не вводит в поисковую строку слово «Да» или «Истина» с целью найти конкретный документ. Если же такое слово будет введено, система выдаст миллионы совпадений, что приведет к зависанию сессии пользователя и колоссальной нагрузке на процесс rphost.

2. Числовые данные

Суммы документов, количества, ставки НДС, коэффициенты и другие числовые показатели индексировать бессмысленно. Поиск конкретного документа по сумме «15420.50» через полнотекстовый поиск неэффективен — для этих задач в системе предусмотрены специализированные отчеты, журналы документов и стандартные отборы в списках.

3. Служебные идентификаторы и хэш-функции

Уникальные идентификаторы (GUID), артикулы-хэши, служебные коды интеграции со сторонними системами (длиной более 20-30 символов) только раздувают индекс. Механизм ППП ориентирован на поиск по словам и их основам (морфологии). Поиск по точной длинной буквенно-цифровой строке работает в ППП неэффективно, а частичный поиск по маске внутри таких строк создает запредельную нагрузку на диски.

Какие поля необходимо оставить в индексе?

Для того чтобы пользователи не потеряли удобство работы, мы должны сохранить индексацию для ключевых полей, по которым реально происходит поиск «по смутным воспоминаниям»:

В крупных конфигурациях (таких как 1С:ERP, 1С:КА или 1С:УХ) хорошим тоном считается полное отключение индексации для второстепенных реквизитов, оставляя в индексе только перечисленные выше ключевые поля для 5–10 основных справочников базы.

Настройка полнотекстового поиска в Конфигураторе

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

Управление индексацией происходит на двух уровнях:

  1. На уровне объекта метаданных: Откройте свойства справочника или документа в конфигураторе. Найдите свойство Использовать полнотекстовый поиск. Если данный объект является чисто служебным (например, технический регистр сведений или справочник настроек интеграции), установите значение в Не использовать. Это сразу исключит весь объект из индексации.
  2. На уровне конкретного реквизита: Если объект должен индексироваться (например, справочник «Контрагенты»), откройте свойства его отдельных реквизитов. Найдите свойство Полнотекстовый поиск. Для реквизитов типа Булево, Число или служебных строк установите значение в Не использовать. Для наименования, адреса и телефона оставьте значение Использовать.

Механика обновления индексов и программное управление

В отличие от транзакционных индексов СУБД, полнотекстовый индекс в 1С обновляется асинхронно. Это означает, что после записи нового элемента справочника он не сразу попадает в результаты поиска. Для актуализации индекса должно отработать регламентное задание ОбновлениеИндексаПолнотекстовогоПоиска.

Процесс обновления делится на два этапа:

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


// Проверим, разрешено ли использование полнотекстового поиска в текущей базе
Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.Разрешить Тогда

    // Выполняем быстрое обновление индекса новыми данными
    ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
    
    // Если требуется выполнить полное слияние индексов (например, по ночному расписанию)
    // ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);

КонецЕсли;

Если файлы полнотекстового поиска были повреждены или их размер превысил допустимые пределы, вы можете выполнить полную очистку и пересоздание индекса с помощью следующего кода:


// Очищаем существующие файлы индекса на диске
ПолнотекстовыйПоиск.ОчиститьИндекс();

// Запускаем полное построение индекса с нуля
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Истина);

Как помочь пользователям искать эффективнее?

Часто пользователи жалуются на неточную работу поиска просто потому, что не знают о существовании поисковых операторов 1С. Расскажите вашим пользователям о следующих возможностях:

Резюме и рекомендации

Подводя итоги нашего анализа, сформулируем основные правила оптимизации полнотекстового поиска в 1С:

  1. Отключайте индексацию служебных объектов: Справочники соответствий, технические логи, регистры настроек не должны попадать в поиск.
  2. Настраивайте свойства реквизитов: Всегда выключайте полнотекстовый поиск для полей с типами Булево, Число, УникальныйИдентификатор и технических перечислений.
  3. Следите за расписанием регламентных заданий: Разделяйте быстрое обновление индекса (днем) и ресурсоемкое слияние (ночью), чтобы минимизировать нагрузку на рабочий процесс rphost.
  4. Контролируйте размер папки 1cv8ftxt: Регулярно проверяйте объем диска на сервере приложений 1С и при необходимости настраивайте очистку и сжатие индекса.
← На главную