1с как ускорить полнотекстовый поиск
Система «1С:Предприятие» располагает механизмом полнотекстового поиска данных, который позволяет искать информацию в базе данных использую поисковые операторы. В версии технологической платформы 8.3.11 механизм полнотекстового поиска претерпел некоторые усовершенствования, это и послужило поводом для написания статьи которая рассказывает о том, что это за механизм, как он устроен и как им пользоваться.
Общие сведения
Сам механизм полнотекстового поиска состоит из двух частей:
- полнотекстовый индекс, который создается в базе данных и обновляется по мере необходимости;
- средства выполнения полнотекстового поиска.
Искать же можно среди данных следующих объектов:
- планы обмена;
- справочники;
- документы;
- планы видов характеристик;
- планы счетов;
- планы видов расчета;
- регистры сведений;
- регистры накопления;
- регистры бухгалтерии;
- регистры расчета;
- бизнес-процессы;
- задачи.
Для перечисленных объектов, а также для подчиненных им объектов (для реквизитов, например) реализовано свойство «Полнотекстовый поиск», которое позволяет управлять полнотекстовым индексирование объектов (очень похоже на историю данных).
Свойство «Полнотекстовый поиск»
Изменение отмеченных объектов учитывается в журнале регистрации изменений. Информация из этого журнала используется при полнотекстовом индексировании, которое выполняется в привилегированном режиме на сервере, монопольный доступ к базе при этом не требуется. Индексацию проходят реквизиты типов:
- строка;
- дата;
- число;
- ссылочные типы;
- хранилище значения.
Для каждого объекта/реквизита в полнотекстовый индекс добавляется:
- имя объекта метаданных или его реквизита;
- синоним объекта метаданных иди его реквизита;
- представление объекта метаданных.
Полнотекстовое индексирование создает основной индекс, а последующие изменения данных — дополнительный. Это важная особенность, так как поиск по основному индексу выполняется быстрее чем по дополнительному. Для устранения этого недостатка в процессе индексирования предусмотрена возможность слияния индексов. Этот процесс может потребовать значительного времени (зависит от размера основного индекса), поэтому для его выполнения рекомендуется выбирать такое время, когда нагрузка на систему минимальна (ночь или выходные).
В клиент-серверном варианте работы поиск выполняется на сервере. Результаты возвращаются частями, размер которых определяется при выполнении команды полнотекстового поиска. Ранжирование результатов осуществляется по:
- «весу» объекта (чем больше ссылок на этот объект из реквизитов других объектов, тем больше вес);
- дате объекта (новые объекты вверху).
Использование механизма
Работа с полнотекстовым поиском осуществляется при помощи свойства глобального контекста — ПолнотекстовыйПоиск.
Отмечу, что примеры предназначен только для демонстрации имеющихся методов и имеет мало общего с реальными задачами, возникающими при работе с полнотекстовым поиском.
Некоторые методы требуют наличия у пользователя административных прав, подробнее об этом написано в синтаксис-помощнике.
Управление полнотекстовым поиском
Сначала рассмотрим методы которые позволяют получать информацию о полнотекстовом индексе и управлять им.
Сам являюсь пользователем УТ 11.4 и при обращении пользователей пользуюсь поиском, и как многие пользователи, сталкиваюсь с медленным поиском в динамических списках. В статье приведу пример кода, который поможет исключить из поиска лишние колонки, ускорит поиск и освободит кучу ресурсов у сервера.
(0) большой плюс! Идея отличная!
Тему поиска будем продожать. :)
P. S. В обслуживаемых мной больших базах этот поиса вообще пришлось отключить. Но нашел другие решения. В следующих статьях все опишу :)
Небось и в динамике по отображаемым колонкам можно настроить огрраничения? Типа сколько колонок выводится, по ним и производим поиск? Или по скрытым колонкам тоже ищет?
(2) Поиск по строке ищет по всем видимым колонкам, для себя я блокирую все доступные для выбора поля (и видимые и скрытые), оставляя только необходимые.
У меня вызывает серьёзные сомнения всеобъемлющая действенность этого метода. Автор, у вас, часом, в списках, где поиск тормозил, не было применения события "ПриПолученииДанныхНаСервере"? Потому что оно, если криво сделано, криво положено на то, что выгребает запрос дин.списка, да ещё если в получении представлений объектов скверно, вот оно да, может тормозить. И простое листание могло тупить (известно же, что у этого обработчика свой, весьма своеобразный кэш и его обновление), и полнотекстовый мог тупить. Хотя 1С ещё в 8.3.8 заявляло, что-де это ускоряет, но далеко не всегда.
Кстати, упомянутые вами методы именно для тюнинга этого показа были сделаны и, согласно документации, только для него и имеют смысл (на самом деле это так, кроме случая без основной таблицы и с ключом-порядковым номером). Позволю себе процитировать СП:
Если в данном обработчике события изменяются данные строк, то рекомендуется исключать поля, в которых изменяются данные, из списков полей, используемых для группировки, упорядочивания и отбора. Если этого не сделать, группировка, упорядочивание и отбор (включая все виды поиска) будет работать неожиданно для пользователя.
Вот, видимо, "все виды поиска" - ваш случай "неожиданных" тормозов.
Так что не уверен, что ваш способ - панацея. Для списков с "ПолучениемДанных", с неоптимальным набором в СтрокеДС, с РЛС на разыменование и представление - может быть. Но не везде. Впрочем, всякое бывает.
(3) Нет, при получении данных на сервере не используется. Основная таблица у списка есть, А сам поиск тормозит из-за соединениями с РС, если их убрать - поиск будет нормальный, но это не выход. У меня поведение поиска такое же какое в статье на которую я сослался.Метод который я описал работает, поэтому и опубликовал такое решение.
(6) Интересно. Т.е. получается, что эти методы влияют и на поведение СКД на этапе процессора компоновки. Любопытно.
Можно использовать ALT + F (сначала выделив нужный столбец), - работает быстро и ищет только по нужному столбцу.
Раньше в платформе был только такой метод поиска, потом добавили "полнотекстовый", который ищет все соединения с представлением по всем отображаемым полям, поэтому и тормозит. Если не изменяет память, то поиск по подстрокам можно отключить у динамического списка, после чего АЛЬТ+Ф становится поиском по-умолчанию.
Но вообще и такой поиск при множестве пользователей (у нас их было 500 штук) при поиске даже номера в журнале документов тормозил систему в целом достаточно сильно (отключили - система ожила). Сервера стоили миллионы и были разделены на скульный и 1Сный.
Немного уточню: предложенный способ решает несколько более широкий спектр проблем, чем означено в заголовке.
Во-первых, он влияет не только на полнотекстовый поиск, но и на "обычный" поиск средствами СУБД.
Во-вторых, такая блокировка позволяет обезопасить от сортировки по "неправильной" (без индекса) колонке списка, а также установки группировок в списках по таким же "неправильным" колонкам.
Для установки опасной сортировки пользователю достаточно просто кликнуть на заголовок столбца. Он тут же и забудет об этом. А настройка сохраняется и дальше список всегда "тормозит". В особо неудачных случаях для отображения списка требуется несколько минут. При этом нет никаких внешних признаков по каким колонкам можно сортировать, а по каким - нельзя. Остается ограничивать доступные для сортировки списка колонки, как описано в заметке.
Cyberhawk; artbear; Дмитрий74Чел; Алексей Воробьев; JohnyDeath; triviumfan; PRO100_NigGaZ; + 7 – Ответить
Восемь вполне рабочих способов увеличить быстродействие программы 1С.
Когда программу 1С впервые устанавливают на компьютер, она, как правило, работает быстро и без задержек. Но проходит время, данные накапливаются, база увеличивается в размере. Добавляются новые пользователи, компьютер со временем устаревает и перестает удовлетворять системным требованиям. Все эти факторы негативно влияют на быстродействие. В этой статье, на примере программы 1С:Бухгалтерия 3.0, рассмотрим несколько способов ускорить работу программы.
Перед выполнением действий, описанных ниже, обязательно сделайте архивную копию базы.
Настройка регламентных и фоновых заданий в 1С
1С:Бухгалтерия помимо выполнения основной работы запускает некоторые операции в фоновом режиме (выполнение таких операций происходит незаметно для пользователя), которые ведут к снижению быстродействия программы.
Откройте перечень регламентных и фоновых заданий: раздел Администрирование –> Обслуживание –> Регламентные операции –> Регламентные и фоновые задания .
Нужно проанализировать работу пользователей и определить какие фоновые задачи можно оставить в автозапуске, а какие отключить. Например, если на предприятии не ведутся операции, связанные с иностранной валютой, то нет необходимости постоянно отслеживать курсы валют и т.п.
Рассмотрим, как отключить автоматическую загрузку курсов валют. Установим курсор на нужную строку и сделаем двойной щелчок мышью.
Для отключения задания убираем галочку Включено . В дальнейшем, при необходимости эту галку можно вернуть на место. Рекомендуется также настроить расписание регламентных заданий, чтобы они выполнялись не всегда, а только в удобное время, например, в обед или по конкретным дням.
Рассмотрим, как настроить расписание загрузки курсов валют. Нужно установить курсор на нужную строку и сделать двойной щелчок мышкой. Галка включено должна быть установлена. Нажать на ссылку Расписание . В открывшемся окне перейти на нужную закладку, например, дневное, установить время начала (на скриншоте 12:00) и нажать Ок . При такой настройке курсы будут загружаться каждый день с 12:00.
Тестирование и исправление информационной базы
Войдите в конфигуратор. Откройте меню Администрирование –> тестирование и исправление . Установите необходимые флажки (можно установить все) и нажмите выполнить .
Некоторые варианты проверки будут понятны только техническим специалистам, но тем не менее рассмотрим их подробнее:
- Реиндексация таблиц информационной базы – перестраивает индексы таблиц и повышает быстродействие работы программы;
- Проверка логической целостности информационной базы –включает в себя ряд стандартных проверок целостности прикладных объектов, например, проверка того, что все объекты метаданных в пределах одной ветки имеют уникальные имена;
- Проверка ссылочной целостности информационной базы – проверка целостности базы данных для обнаружения «битых» ссылок. Например, если какой-либо объект конфигурации ссылается на несуществующий объект. Если выбираем такой вариант, то дополнительно становятся доступны настройки:
- При наличии ссылок на несуществующие объекты означает, что при обнаружении «битых» ссылок, алгоритм будет обрабатывать такие ссылки в соответствии с выбранным вариантом;
- При частичной потере данных объектов означает, что остаток данных достаточен для восстановления данных какого-либо объекта.
Процедуру тестирования и исправления информационной базы 1С можно выполнять только в монопольном режиме. При отметке всех галок тестирование может происходить достаточно долгое время.
Индексация полнотекстового поиска (либо отключение)
Про назначение полнотекстового поиска ранее я уже снял видеоурок, рекомендую его посмотреть.
Если после просмотра видео вы решите, что он вам не требуется, просто отключите его. Для этого зайдите в раздел Администрирование –> Общие настройки –> Поиск данных и снимите флажок использования.
Если же хотите его использовать, тогда обновите индекс. Для этого нажмите на ссылку Настроить . В открывшимся окне нажмите на кнопку Обновить индекс .
Обновление платформы и конфигурации
Работа программы может замедлится из-за старых релизов платформы. Соответственно, если обновлять саму конфигурацию, то и релиз платформы должен ей соответствовать. Из верхнего выходящего списка выберите О программе .
Проверить наличие обновлений и самостоятельно обновить программу можно из меню Администрирование –> интернет поддержка и сервисы –> обновление версии программы . При затруднениях рекомендуется обратиться в обслуживающую организацию.
Запуск в Тонком клиенте
Работа в режиме тонкого клиента минимизирует потребление программных ресурсов. В окне запуска нажимаем на Изменить . Затем далее , проверяем основной режим запуска. Даже если стоит выбирать автоматически , возможно программа по умолчанию запускается в тонком клиенте и никаких дополнительных настроек не требуется. Проверить это можно в информации о программе.
Тестирование физической целостности утилитой chdbfl
Нужно зайти в папку с установленной платформой в конечную папку bin . Запустить файл chdbfl , прописать путь к базе, поставить галку исправлять обнаруженные ошибки и нажать выполнить .
После окончания тестирования окно закрыть и проверить базу на работоспособность.
Отключение ненужной функциональности
Меню Администрирование –> Функциональность . Внимательно проверить все закладки и отключить неиспользуемые функции.
Например, если в организации нет экспорта или производства, эти настройки можно отключить. (включить можно в любой момент).
Свертка информационной базы
Свертка информационной базы 1С – это обработка документов и регистров, при которой происходит формирование документов ввода остатков на определенную дату (дату свертки) и удаление документов, которые не используются, и движений по регистрам (сведений, накопления, бухгалтерии) до даты свертки включительно. Свертка информационной базы выполняется, чтобы сократить объем данных в рабочей базе и увеличить скорость работы системы.
Данные рекомендации вполне можно сделать самостоятельно. В статье описано именно действия с программой. Помимо них для ускорения работы 1С можно настроить используемую антивирусную программу, проверить параметры компьютера и при необходимости увеличить его характеристики или заменить на новый, установить твердотельный жесткий диск SSD.
Вас может заинтересовать
Инструкция по настройке распределенной информационной базы в 1С на примере Управление торговлей 11. Нюансы работы, наиболее частые ошибки и пути их решения.
Описание особенностей разных режимов работы 1С:Предприятие 8. Отличия тонкого, толстого и веб-клиента. Рекомендации по выбору для пользователей.
Методы решения самых популярных технических ошибок (внутренние ошибки информационной базы), возникающих при работе с различными конфигурациями 1С:Предприятие 8.
Здравствуйте.
После переустановки SQL и 1С началась проблема с полнотекстовым поиском.
При работе с полнотекстовым поиском периодически раз в 2-5 раз зависает при этом в диспетчере вижу что ребутятся rphost и заново начинает нарастать потребление оперативы.
файл indexMain.bin весит 4,5Гб.
Платформа 8.3.16.1148 УФ.
Очистка индекса помогает ненадолго через несколько часов проблема снова появляется.
Платформу переустанавливал не помогает.
что можно еще посмотреть ?(0)
"Очистить индекс — удаляет все файлы полнотекстового индекса. Может использоваться в случае, когда работа полнотекстового поиска по каким-то причинам нарушена. После удаления индекса необходимо заново его построить, используя кнопку «Обновить индекс».
Проверить индекс – выполняет проверку состояния индекса полнотекстового поиска.
При необходимости пользователь может ограничить максимальный размер индексируемых данных, проставив одноименный флаг и указав максимальный размер данных для индексации. Ограничение размера индексируемых данных позволяет повысить скорость индексации и полнотекстового поиска." (цит.)(2) - "пользователь может ограничить максимальный размер индексируемых данных" (цит.), какие у тебя параметры в данный момент выставлены?
(6) - Я не про это спрашивал.
"Для настройки извлечения текста необходимо с помощью переключателя выбрать один из вариантов:Все рабочие станции работают под управлением ОС Windows - в этом случае становится доступной команда Настроить расписание, с помощью которой можно настроить расписание, по которому будет выполняться регламентное задание.
Данный вариант подходит, когда в Администрировании серверов 1С Предприятия задано следующее правило для сервера под управлением ОС Microsoft Windows:Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам." (цит.)
(5) - Правильно ли я тебя понял, пользователи "ходят" на сервер и там работают в 1С? (крайне плохой вариант с точки зрения безопасности, а если учесть, что сейчас развелось куча "шифровальщиков", то при отсутствии надёжной системы резервного копирования [VSS не в счёт], это может привести к очень печальным последствиям)
(6) - Самый простой вариант, отключить полнотекстовый поиск, затем вновь его включить. (1С сама произведёт индексацию) После данной операции, всё должно работать корректно.Как показала жизнь, практика и "вот это все" - штатный движок полнотекстового поиска достаточно эффективно может решать задачи оптимизации поиска данных в информационной базе. Главное уметь его готовить. Не важно - файловая у Вас база или клиент-серверная. Полнотекстовый поиск ожидает своего включения и обслуживания. А если все настроено грамотно, то это значительно улучшит отклик системы в операциях поиска (в динамических списках, поиск при вводе по строке и другое).
Конечно, у этой функциональности есть и недостатки, такие как: необходимость следить за его обслуживанием и работоспособностью, разбирать "странные" баги, уметь правильно его сопровождать при обновлении платформы, знать связанный функционал в БСП и т.д. Детали выходят за рамки этой публикации, возможно это будущая статья?
Сейчас Вы видите перед собой инструмент, который позволит управлять полнотекстовым индексом удобным способом, а также отслеживать его состояние с получением более детальной информации. Сравните сами разницу между штатной обработкой обслуживания полнотекстового индекса и этим инструментом.
Это стандартная обработка, поставляемая с платформой.
Примерно то же самое можно встретить в БСП, но уже в более удобном виде.
Если же мы обратимся к "Мастеру полнотекстового поиска", то выглядеть он будет так.
Заметна ли разница?
Для большинства задач хватит и штатного функционала, но иногда все же нужно немного больше, особенно если Вы отслеживаете работу ППД.
Основными возможностями инструмента являются:
- Поддержка штатных операций с индексом:
- Включение / отключение использования полнотекстового индекса
- Полное обновление индекса.
- Частичное обновление (частичного индекса).
- Слияние частичного и полного индекса.
- Очистка индекса.
- Дата актуальности индекса.
- Проверка необходимости обновления данных в индексе.
- Проверка необходимости слияния частичного и полного индекса.
- Количество заданий индексирования.
- Максимальный размер индексируемых данных.
- Режим разделения составных слов.
- Путь к каталогу полнотекстового индекса (инструмент определяет его автоматически, но Вы всегда можете указать его вручную при необходимости).
- Размер каталога полнотекстового поиска.
- Состав объектов метаданных и их полей, которые входят в состав индексируемых данных.
- Очередь объектов к обновлению для попадания в полнотекстовый индекс.
- Информация о файлах в каталоге индекса ППД.
Требования к работе:
- Платформа 1С версии 8.3.5 и выше.
- Режим работы не имеет значения (клиент-серверный или файловая база. СУБД не имеет значения).
- Только управляемые формы. Для использования в обычном приложении используйте известные обходные пути.
- Расширенные возможности работают только для Windows (сервер 1С должен быть на этой ОС).
Это экспериментальный инструмент и в нем могут быть ошибки, над которыми я еще работаю. Буду развивать его дальше, а пока еще немного информации.
Принцип работы
Принципы работы очень просты:
- Штатные возможности платформы 1С в виде менеджера полнотекстового поиска.
- Расширенные возможности в виде определения каталога индекса ППД.
- Анализ файлов из каталога индекса ППД.
- А также анализ объектов метаданных с полнотекстовым поиском.
Скорее всего вопросов у Вас не останется. Вы же используете полнотекстовый поиск? И понимаете, что это собственный движок платформы 1С и никакой полнотекстовый поиск СУБД SQL Server или PostgreSQL не используется?
Примеры использования
Продемонстрируем несколько простых случаев использования инструмента для наглядности.
Читайте также: