Как включить и обслуживать индекс полнотекстового поиска в 1С:Предприятии

· 9 мин

Содержание

Чтобы сделать индексацию в 1С 8.3, включите полнотекстовый поиск в базе и постройте индекс: в типовых конфигурациях это Администрирование → Общие настройки, группа «Полнотекстовый поиск», флажок и команда обновления индекса. Дальше индекс поддерживают два регламентных задания — обновление и слияние. Без них новые документы в поиске не появятся.

Механизм одинаков для всех конфигураций на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, ERP. Различается только форма, через которую им управляют. Ниже разобран весь путь: от того, где физически лежат файлы индекса, до восстановления, если индекс испорчен.

Как устроен индекс полнотекстового поиска в 1С

Полнотекстовый поиск (ППД) ищет слово по всей базе сразу: в справочниках, документах, комментариях, наименованиях. Ищет он не в таблицах СУБД, а в отдельном индексе. Индекс — набор служебных файлов, которые платформа ведёт сама.

Где лежат файлы индекса:

Вариант базыКаталог индекса
Файловаяпапка 1Cv8FTxt внутри каталога базы, рядом с 1Cv8.1CD
Клиент-сервернаяsrvinfo\reg_1541\<идентификатор базы>\1Cv8FTxt на рабочем сервере

Индекс состоит из двух частей:

  • 📦 основной индекс — большой, оптимизированный для поиска;
  • ➕ дополнительный индекс — сюда быстро попадают свежие изменения.

Обновление индекса дописывает изменения в дополнительную часть. Это быстро. Слияние переносит дополнительную часть в основную. Это долго и нагружает диск, зато поиск снова работает быстро.

Если дополнительный индекс годами не сливается, поиск постепенно замедляется. Поэтому в типовых конфигурациях слияние вынесено в отдельное задание.

Индексация для поиска и индексы таблиц — разные вещи

Словом «индексация» в 1С называют три разных механизма. Их часто путают:

Что называют индексациейГде настраиваетсяЗачем
Индекс полнотекстового поискарежим 1С:Предприятие, Конфигуратор (свойство «Полнотекстовый поиск»)поиск по словам во всей базе
Индексы реквизитов в СУБДКонфигуратор, свойство реквизита «Индексирование»скорость отборов и запросов
Реиндексация таблицКонфигуратор → Администрирование → Тестирование и исправлениевосстановление индексов файловой базы

Эта статья — про первый пункт. Два других затронуты в разделе о диагностике.

Что проверить до включения индексации

Первое построение индекса читает всю базу. На базе в десятки гигабайт это часы работы. Подготовьтесь заранее.

  • 💾 Место на диске. Индекс может занимать заметную долю объёма самой базы. Свободного места на диске с каталогом индекса должно быть с запасом, особенно на время слияния.
  • 🛡️ Антивирус. Добавьте каталог 1Cv8FTxt в исключения. Проверка файлов индекса «на лету» замедляет обновление и иногда приводит к его ошибкам.
  • 🔐 Права. В клиент-серверном варианте индекс пишет служба сервера 1С. У её учётной записи должны быть права на запись в каталог srvinfo. В файловом — у пользователя Windows, под которым открыта база, должны быть права на каталог базы.
  • 🕐 Время. Первичное построение планируйте на вечер или выходные. Пользователи работать смогут, но сервер будет нагружен.
  • 👤 Роль. Включать поиск и обновлять индекс может пользователь с полными правами (роль «Администратор системы» или аналогичная в вашей конфигурации).

Как включить полнотекстовый поиск и сделать индексацию в 1С

Есть три способа. Результат у них один и тот же.

Способ 1. Через настройки типовой конфигурации

Подходит для БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP и других конфигураций на Библиотеке стандартных подсистем.

  1. Откройте Администрирование → Общие настройки.
  2. Найдите группу «Полнотекстовый поиск».
  3. Установите флажок использования полнотекстового поиска.
  4. Нажмите ссылку настройки рядом с флажком. Откроется форма управления поиском со статусом индекса.
  5. Запустите обновление индекса и дождитесь окончания.

После включения в конфигурации автоматически начинают работать регламентные задания обслуживания индекса (о них ниже).

Способ 2. Через стандартную обработку платформы

Работает в любой конфигурации, даже нетиповой.

  1. Включите показ команды «Все функции»: меню Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”».
  2. Откройте Все функции → Стандартные → Управление полнотекстовым поиском.
  3. Переключите режим поиска в «Включен».
  4. Нажмите «Обновить индекс».

В этой же форме видны дата актуальности индекса и признак, актуален ли он сейчас. Здесь же есть очистка индекса.

Способ 3. Встроенным языком

Удобно для внешней обработки или своего регламентного задания:

// Разрешаем полнотекстовый поиск, если он выключен
Если ПолучитьРежимПолнотекстовогоПоиска() <> РежимПолнотекстовогоПоиска.Разрешить Тогда
    УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить);
КонецЕсли;

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

Сообщить("Индекс актуален: " + ПолнотекстовыйПоиск.ИндексАктуален());
Сообщить("Дата актуальности: " + ПолнотекстовыйПоиск.ДатаАктуальности());

Код выполняйте на сервере. Пользователю нужны административные права.

СпособКогда выбратьОграничения
Общие настройкитиповая конфигурация на БСПпуть отличается в старых нетиповых базах
«Все функции»любая конфигурация, разовая операциярасписание не настраивает
Встроенный языксвоя обработка, автоматизациянужен программист

Какие объекты и реквизиты попадают в индексацию

Индексирует платформа не всё подряд. Решает разработчик конфигурации, причём на двух уровнях.

Уровень объекта. У справочника, документа, регистра и других объектов в палитре свойств Конфигуратора есть свойство «Полнотекстовый поиск» со значениями «Использовать» и «Не использовать». Если стоит «Не использовать», объект в поиск не попадает совсем.

Уровень реквизита. Такое же свойство есть у каждого реквизита и реквизита табличной части. Так можно исключить служебные поля и оставить в индексе только то, по чему реально ищут.

Как проверить, почему конкретный документ не находится:

  1. Откройте Конфигуратор, дерево метаданных.
  2. Выделите нужный объект, откройте его свойства (Alt+Enter).
  3. Найдите свойство «Полнотекстовый поиск» — для удобства воспользуйтесь строкой поиска в палитре свойств.
  4. Проверьте то же свойство у реквизита, по которому ищете.

В типовой конфигурации на поддержке изменить это свойство можно, только включив возможность изменения объекта. Это усложнит последующие обновления. В типовых решениях основные объекты уже отмечены для поиска, менять что-то обычно нет нужды.

После изменения свойства обновите конфигурацию базы данных, а затем постройте индекс заново — иначе старые данные этого объекта в индекс не попадут.

Что ещё влияет на результат

  • 🔒 Права пользователя. Поиск возвращает только то, что пользователь имеет право читать. Бухгалтер и кладовщик по одному запросу увидят разные списки.
  • 📎 Присоединённые файлы. В конфигурациях на БСП из прикреплённых документов извлекается текст. Его тоже можно найти поиском, но после того как отработает задание извлечения текста.
  • 🔤 Морфология. Поиск понимает словоформы: по запросу «договор» найдутся «договора» и «договором».

Первое построение индекса и как понять, что он готов

Первичная индексация — самая долгая операция. Порядок действий:

  1. Запустите обновление индекса любым способом из раздела выше.
  2. Не закрывайте сеанс до окончания, если обновляете вручную. В клиент-серверном варианте процесс видно в консоли кластера как активный сеанс.
  3. После завершения откройте форму управления поиском. Признак актуальности должен показывать, что индекс актуален, дата актуальности — текущая.
  4. Сделайте пробный поиск по слову из документа, созданного сегодня.

Для больших баз удобно обновлять индекс порциями — второй параметр метода ОбновитьИндекс() равен Истина. Тогда за один вызов обрабатывается часть изменений, а задание можно запускать часто, не блокируя сервер надолго.

Если на первом построении процесс идёт очень долго, проверьте, нет ли в индексе объектов с огромными текстовыми реквизитами: журналов регистрации обмена, протоколов, хранилищ XML. Их часто имеет смысл исключить из поиска.

Регламентные задания: автоматическое обновление и слияние индекса

Ручное обновление нужно один раз. Дальше индекс должен жить сам. В конфигурациях на БСП для этого есть два регламентных задания:

ЗаданиеЧто делаетРазумное расписание
Обновление индекса ППДдописывает изменения в дополнительный индекскаждые 5–15 минут в рабочее время
Слияние индекса ППДпереносит дополнительный индекс в основнойраз в сутки, ночью

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

Особенности файловой и клиент-серверной базы

  • 🖥️ Клиент-серверный вариант. Задания выполняет сервер 1С по расписанию. Проверьте в консоли кластера, что у информационной базы не стоит блокировка регламентных заданий.
  • 📁 Файловый вариант. Регламентные задания выполняются в одном из открытых клиентских сеансов. Если базу никто не открывал неделю, индекс неделю не обновлялся. Для такой базы полезно держать открытым сеанс под служебным пользователем или опубликовать базу на веб-сервере.

Своё задание для нетиповой конфигурации

Если конфигурация не на БСП, добавьте в Конфигураторе регламентное задание с процедурой в общем модуле:

Процедура ОбновитьИндексПолнотекстовогоПоиска() Экспорт
    Если ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить
        И Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда
        ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
    КонецЕсли;
КонецПроцедуры

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

Общий модуль должен быть серверным. Первому заданию поставьте частое расписание, второму — ночное.

Индекс не обновляется или поиск не находит: диагностика и пересоздание

Большинство проблем с поиском сводится к одному из трёх: индекс устарел, объект исключён из индекса, файлы индекса повреждены.

Диагностика: выберите симптом

Как пересоздать индекс с нуля

Безопасный путь — штатный, без работы с файлами:

  1. Откройте Все функции → Стандартные → Управление полнотекстовым поиском.
  2. Нажмите «Очистить индекс ».
  3. Нажмите «Обновить индекс» и дождитесь окончания.

То же самое в коде: ПолнотекстовыйПоиск.ОчиститьИндекс(), затем ПолнотекстовыйПоиск.ОбновитьИндекс().

Если штатная очистка падает с ошибкой, остаётся ручное удаление каталога 1Cv8FTxt. Порядок:

  1. Предупредите пользователей и завершите их сеансы.
  2. В клиент-серверном варианте остановите службу агента сервера 1С. Все сеансы на всех базах этого сервера оборвутся — делайте это только в нерабочее время.
  3. Переименуйте каталог 1Cv8FTxt (не удаляйте сразу — пусть останется до проверки).
  4. Запустите службу, войдите в базу и постройте индекс заново.
  5. Убедитесь, что поиск работает, и только потом удалите старый каталог.

В файловой базе каталог 1Cv8FTxt лежит рядом с файлом базы 1Cv8.1CD. Трогать нужно только каталог индекса. Файл базы и другие служебные каталоги не перемещайте и не удаляйте.

Если проблема не в поиске, а в индексах таблиц

Бывает, что «индексацию» просят сделать из-за ошибок базы: отчёты считают неверно, документы не открываются, при открытии списков возникают ошибки индекса. Тогда нужна не настройка поиска, а реиндексация таблиц:

  1. Сделайте резервную копию базы .
  2. Откройте Конфигуратор, Администрирование → Тестирование и исправление.
  3. Отметьте «Реиндексация таблиц информационной базы», остальные флажки по ситуации.
  4. Запустите проверку.

Для этой операции нужен монопольный доступ к базе: все пользователи должны выйти. В клиент-серверном варианте индексы таблиц обслуживает СУБД, и регламентная перестройка индексов настраивается её средствами — планом обслуживания в MS SQL Server или аналогом в PostgreSQL.

Частые вопросы

Можно ли работать в базе, пока строится индекс?
Да. Пользователи продолжают работать, но поиск выдаёт неполный результат, пока индекс не станет актуальным. Сервер в это время нагружен сильнее обычного.
Сколько места занимает индекс полнотекстового поиска?
Зависит от числа индексируемых объектов и длины текстовых реквизитов. Точную цифру покажет только размер каталога 1Cv8FTxt после построения, поэтому держите на диске запас.
Нужно ли переносить индекс при переносе базы на другой сервер?
Нет. Выгрузка .dt индекс не содержит. На новом месте включите поиск и постройте индекс заново.
Можно ли выключить полнотекстовый поиск, если он не нужен?
Можно, в той же форме управления поиском или флажком в общих настройках. Регламентные задания перестанут нагружать сервер, но поиск по всем данным и быстрый поиск в некоторых списках станут недоступны.
Почему поиск находит документ по слову, а по части слова — нет?
Поиск идёт по словам и их формам. Для поиска по началу слова добавьте в конце звёздочку, например накладн*.