Полнотекстовый поиск (ППП) в платформе 1С:Предприятие 8 — это мощный инструмент, который позволяет пользователям быстро находить нужную информацию по всей базе данных, используя простые поисковые запросы. По умолчанию при создании новых объектов метаданных (справочников, документов) платформа автоматически включает все их реквизиты в полнотекстовый индекс. Однако на практике такой подход «всё или ничего» приводит к лавинообразному росту объема индекса, перегрузке дисковой подсистемы и замедлению работы сервера приложений.
В этой статье мы подробно проанализируем устройство полнотекстового поиска в 1С, выясним, почему индексация некоторых типов данных вредит системе, и пошагово разберем, какие поля необходимо исключить из поиска для оптимизации производительности.
Перед тем как перейти к настройке полей, давайте разберем физическую механику хранения данных полнотекстового поиска. В отличие от стандартных индексов СУБД (например, MS SQL Server или PostgreSQL), файлы полнотекстового поиска 1С хранятся отдельно от самой базы данных.
Они располагаются в специальном каталоге на сервере приложений 1С — в папке 1cv8ftxt, которая находится внутри каталога описания конкретной информационной базы. Это накладывает определенные обязательства на системного администратора:
1cv8ftxt в неоптимизированных базах может составлять от 10% до 30% от общего объема текстовой информации в СУБД. Главными «пожирателями» свободного места являются длинные строковые поля и файлы (PDF, DOCX, TXT), прикрепленные к объектам базы.Разберем детально, почему индексация всех полей подряд является избыточной. Для оптимизации базы данных нам необходимо отключить полнотекстовый поиск для реквизитов, которые не несут смысловой нагрузки при текстовом поиске.
1. Поля с низкой селективностью (Булево, Перечисления, Статусы)
Рассмотрим реквизиты с типом Булево (например, «Проведен», «ПометкаУдаления», «Услуга») или технические перечисления (например, статус документа «Новый», «В работе», «Закрыт»). Индексация таких полей абсолютно бесполезна. Пользователь практически никогда не вводит в поисковую строку слово «Да» или «Истина» с целью найти конкретный документ. Если же такое слово будет введено, система выдаст миллионы совпадений, что приведет к зависанию сессии пользователя и колоссальной нагрузке на процесс rphost.
2. Числовые данные
Суммы документов, количества, ставки НДС, коэффициенты и другие числовые показатели индексировать бессмысленно. Поиск конкретного документа по сумме «15420.50» через полнотекстовый поиск неэффективен — для этих задач в системе предусмотрены специализированные отчеты, журналы документов и стандартные отборы в списках.
3. Служебные идентификаторы и хэш-функции
Уникальные идентификаторы (GUID), артикулы-хэши, служебные коды интеграции со сторонними системами (длиной более 20-30 символов) только раздувают индекс. Механизм ППП ориентирован на поиск по словам и их основам (морфологии). Поиск по точной длинной буквенно-цифровой строке работает в ППП неэффективно, а частичный поиск по маске внутри таких строк создает запредельную нагрузку на диски.
Для того чтобы пользователи не потеряли удобство работы, мы должны сохранить индексацию для ключевых полей, по которым реально происходит поиск «по смутным воспоминаниям»:
Наименование (для справочников);Код или Номер (для быстрого поиска документов и контрагентов);Артикул (для номенклатуры);Комментарий, Описание, Содержание (любые многострочные текстовые поля, куда пользователи пишут произвольный текст).В крупных конфигурациях (таких как 1С:ERP, 1С:КА или 1С:УХ) хорошим тоном считается полное отключение индексации для второстепенных реквизитов, оставляя в индексе только перечисленные выше ключевые поля для 5–10 основных справочников базы.
Проанализируем, как технически управлять индексацией объектов и реквизитов в среде разработки 1С.
Управление индексацией происходит на двух уровнях:
Использовать полнотекстовый поиск. Если данный объект является чисто служебным (например, технический регистр сведений или справочник настроек интеграции), установите значение в Не использовать. Это сразу исключит весь объект из индексации.Полнотекстовый поиск. Для реквизитов типа Булево, Число или служебных строк установите значение в Не использовать. Для наименования, адреса и телефона оставьте значение Использовать.В отличие от транзакционных индексов СУБД, полнотекстовый индекс в 1С обновляется асинхронно. Это означает, что после записи нового элемента справочника он не сразу попадает в результаты поиска. Для актуализации индекса должно отработать регламентное задание ОбновлениеИндексаПолнотекстовогоПоиска.
Процесс обновления делится на два этапа:
Мы можем управлять этими процессами программно. Посмотрим на пример кода, который можно поместить в обработку обслуживания или регламентное задание:
// Проверим, разрешено ли использование полнотекстового поиска в текущей базе
Если ПолнотекстовыйПоиск.ПолучитьРежимИспользования() = РежимИспользованияПолнотекстовогоПоиска.Разрешить Тогда
// Выполняем быстрое обновление индекса новыми данными
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
// Если требуется выполнить полное слияние индексов (например, по ночному расписанию)
// ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
КонецЕсли;
Если файлы полнотекстового поиска были повреждены или их размер превысил допустимые пределы, вы можете выполнить полную очистку и пересоздание индекса с помощью следующего кода:
// Очищаем существующие файлы индекса на диске
ПолнотекстовыйПоиск.ОчиститьИндекс();
// Запускаем полное построение индекса с нуля
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Истина);
Часто пользователи жалуются на неточную работу поиска просто потому, что не знают о существовании поисковых операторов 1С. Расскажите вашим пользователям о следующих возможностях:
* (поиск по началу слова): Запрос авто* найдет и «автомобиль», и «автотранспорт», и «автобус»."" (поиск точной фразы): Запрос "Иванов Иван" исключит выдачу документов, где эти слова находятся в разных частях текста.# (нечеткий поиск): Запрос #молоко найдет слова с опечатками, например «малако».! (логическое НЕ): Запрос кабель !медный найдет все кабели, кроме медных.Подводя итоги нашего анализа, сформулируем основные правила оптимизации полнотекстового поиска в 1С:
Булево, Число, УникальныйИдентификатор и технических перечислений.rphost.1cv8ftxt: Регулярно проверяйте объем диска на сервере приложений 1С и при необходимости настраивайте очистку и сжатие индекса.