Перейти к содержимому

1.19 Полнотекстовый поиск в 1С и особенности его использования при нечетком поиске

Telegram → Просто о платформе 1С

❓ 1.19 Полнотекстовый поиск в 1С и особенности его использования?

Основы полнотекстового поиска мы уже рассматривали ранее см. Поиск по синонимам. В этом вопросе важно обратить внимание на особенности работы механизма и различия между версиями полнотекстового поиска.

В платформе 1С:Предприятие 8.3 существует две версии полнотекстового поиска:

  • версия 1;
  • версия 2 с версии 8.3.22.

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

В первой версии полнотекстового поиска используется два индекса:

  • основной индекс;
  • дополнительный индекс.

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

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

Особенность в том, что поиск по основному индексу выполняется быстро, а поиск по дополнительному индексу — медленнее.

Чтобы повысить производительность поиска, для версии 1 используется слияние индексов.

Слияние индексов:

  • объединяет изменения из дополнительного индекса с основным индексом;
  • может быть длительной операцией;
  • создает дополнительную нагрузку на систему.

Поэтому такую операцию обычно рекомендуется выполнять:

  • ночью;
  • в выходные;
  • в периоды минимальной нагрузки.

Обновление индекса полнотекстового поиска версии 1 выполняется фоновым заданием.

При этом важно, что такое фоновое задание должно быть реализовано в прикладном решении.

То есть платформа предоставляет механизм полнотекстового поиска, но управление обновлением индекса в версии 1 требует участия разработчика.

Особенность поиска по буквам «е» и «ё» в версии 1

Заголовок раздела «Особенность поиска по буквам «е» и «ё» в версии 1»

В версии 1 буквы «е» и «ё» считаются одинаковыми.

Например, слова:

  • еж;
  • ёж.

Для полнотекстового поиска версии 1 будут считаться эквивалентными.

Полнотекстовый поиск версии 2 появился позже и является более современным вариантом механизма.

В версии 2 используется один единый индекс.

При изменении данных индекс обновляется автоматически, без необходимости реализовывать отдельное фоновое задание в прикладном решении.

Версия 2 имеет несколько важных преимуществ:

  • используется один индекс;
  • нет разделения на основной и дополнительный индекс;
  • индекс обновляется автоматически;
  • поиск работает быстрее;
  • ресурсы используются эффективнее.

Именно поэтому для решений версия 2 обычно является предпочтительной.

Особенность поиска по буквам «е» и «ё» в версии 2

Заголовок раздела «Особенность поиска по буквам «е» и «ё» в версии 2»

В версии 2 буквы «е» и «ё» считаются разными.

Это важное отличие от версии 1.

Например, если нужно найти слово с буквой ё, в поисковой строке нужно использовать именно ё либо применять подходящее поисковое выражение.

Полнотекстовый поиск версии 2 не поддерживается в файловом варианте информационной базы.

Исключение — файловая информационная база, работающая через автономный сервер.

То есть версия 2 поддерживается:

  • в клиент-серверном варианте;
  • в файловом варианте при использовании автономного сервера.

Полнотекстовый поиск инициируется на стороне клиента.

Но программный интерфейс полнотекстового поиска доступен на сервере.

Фактическое выполнение зависит от варианта работы информационной базы:

  • в файловом варианте — на компьютере пользователя;
  • в клиент-серверном варианте — в кластере серверов 1С.

Программный интерфейс полнотекстового поиска

Заголовок раздела «Программный интерфейс полнотекстового поиска»

Полнотекстовый поиск в данных выполняется средствами встроенного языка.

Исключение — глобальный поиск, который используется платформой как отдельный механизм.

Для создания списка полнотекстового поиска используется метод:

ПолнотекстовыйПоиск.СоздатьСписок()

Метод принимает параметры:

  • СтрокаПоиска — поисковое выражение;
  • РазмерПорции — количество объектов, возвращаемых за одну итерацию поиска.

Типовой сценарий — поиск номенклатуры через расширенный поиск.

// Создать список поиска
СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(ПараметрыПоиска.СтрокаПоиска);
СписокПоиска.ПолучатьОписание = Ложь;
СписокПоиска.ИспользованиеМетаданных =
ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать;
ОбластиПоиска = Новый Массив;
// Добавляем метаданные, в которых будет выполняться поиск
Для Каждого СтрМас Из ПараметрыПоиска.ОбластиПоиска Цикл
ОбластиПоиска.Добавить(СтрМас.ОбъектМетаданных);
КонецЦикла;
СписокПоиска.ОбластьПоиска = ОбластиПоиска;
// Запуск поиска
СписокПоиска.ПерваяЧасть();
// далее — обработка результата

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

В клиент-серверном варианте файлы индекса размещаются в каталоге данных кластера серверов 1С.

Для разных версий используются разные каталоги:

  • версия 1 — 1Cv8FTxt;
  • версия 2 — 1Cv8FTxt2.

Полнотекстовый поиск может потреблять значительные ресурсы.

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

Для этого используют требование назначения функциональности кластера 1С.

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

Поэтому полнотекстовый поиск не стоит включать «на всякий случай».

Версия 2 — более современный и предпочтительный вариант полнотекстового поиска.

Версия 1 требует большего контроля:

  • нужно управлять обновлением индекса;
  • нужно учитывать дополнительный индекс;
  • нужно контролировать нагрузку.

Версия 2 проще в сопровождении, но имеет ограничение: она не работает в файловом варианте информационной базы.

Полнотекстовый поиск в 1С — мощный, но достаточно тяжелый механизм.

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

При проектировании важно учитывать версию полнотекстового поиска, вариант работы информационной базы и нагрузку на сервера.