Очистил индекс полнотекстового поиска

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

Общие сведения

Сам механизм полнотекстового поиска состоит из двух частей:

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

Искать же можно среди данных следующих объектов:

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

Для перечисленных объектов, а также для подчиненных им объектов (для реквизитов, например) реализовано свойство «Полнотекстовый поиск», которое позволяет управлять полнотекстовым индексирование объектов (очень похоже на историю данных).

Свойство «Полнотекстовый поиск»

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

  • строка;
  • дата;
  • число;
  • ссылочные типы;
  • хранилище значения.

Для каждого объекта/реквизита в полнотекстовый индекс добавляется:

  • имя объекта метаданных или его реквизита;
  • синоним объекта метаданных иди его реквизита;
  • представление объекта метаданных.

Полнотекстовое индексирование создает основной индекс, а последующие изменения данных — дополнительный. Это важная особенность, так как поиск по основному индексу выполняется быстрее чем по дополнительному. Для устранения этого недостатка в процессе индексирования предусмотрена возможность слияния индексов. Этот процесс может потребовать значительного времени (зависит от размера основного индекса), поэтому для его выполнения рекомендуется выбирать такое время, когда нагрузка на систему минимальна (ночь или выходные).

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

  • «весу» объекта (чем больше ссылок на этот объект из реквизитов других объектов, тем больше вес);
  • дате объекта (новые объекты вверху).

Использование механизма

Работа с полнотекстовым поиском осуществляется при помощи свойства глобального контекста — ПолнотекстовыйПоиск.

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

Некоторые методы требуют наличия у пользователя административных прав, подробнее об этом написано в синтаксис-помощнике.

Управление полнотекстовым поиском

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 &НаСервере Процедура РаботаСПолнотекстовымПоиском() //проверим доступность полнотекстового поиска Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Запретить Тогда //разрешим полнотекстовый поиск //в этом случае имеющийся индекс будет очищен ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить); Иначе //очистим весь индекси начнем все с начала ПолнотекстовыйПоиск.ОчиститьИндекс(); КонецЕсли; //дата актуальности индекса ДатаАктуальности = ПолнотекстовыйПоиск.ДатаАктуальности(); //получим максимальный размер индексируемых данных в байтах //по умолчанию 1048576 байт — 1 мегабайт МаксимальныйРазмерИД = ПолнотекстовыйПоиск.ПолучитьМаксимальныйРазмерИндексируемыхДанных(); //будем индексировать все данные ПолнотекстовыйПоиск.УстановитьМаксимальныйРазмерИндексируемыхДанных(0); //получим максимальное количество фоновых заданий //которое может быть запущено для обновления индекса КоличествоЗаданий = ПолнотекстовыйПоиск.ПолучитьКоличествоЗаданийИндексирования(); //доверим системе самой выбирать количество заданий ПолнотекстовыйПоиск.УстановитьКоличествоЗаданийИндексирования(0); //проверяем актуальность индекса Если НЕ ПолнотекстовыйПоиск.ИндексАктуален() Тогда //проверяем необходимость слияния Если НЕ ПолнотекстовыйПоиск.ОбновлениеИндексаЗавершено() Тогда //обновляем индекс со слиянием ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь); Иначе //обновление без слияния ПолнотекстовыйПоиск.ОбновитьИндекс(); КонецЕсли; КонецЕсли; КонецПроцедуры

Выполнение поиска и обработка результатов

Описание синтаксиса поисковых выражений можно посмотреть .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 &НаСервере Процедура РаботаСоСпискомРезультатов() //поищем в базе по слову «Товары» и установим размер порции — 10 //размер порции по умолчанию — 20 РезультатыПоиска = ПолнотекстовыйПоиск.СоздатьСписок(«Товары», 10); //для каждого результата буде тзаполнено описание //что помогает понять контекст РезультатыПоиска.ПолучатьОписание = Истина; //в тоже время, это ускорит поиск //РезультатыПоиска.ПолучатьОписание = Ложь; //выполняет поиск и получает первую часть результатов РезультатыПоиска.ПерваяЧасть(); //если результатов поиска слишком, то производится усечение результатов СлишкомМногоРезультатов = РезультатыПоиска.СлишкомМногоРезультатов(); //общее количество найденых результатов ОбщееКоличество = РезультатыПоиска.ПолноеКоличество(); //количество результатов в текущей порции КоличествоВЭтойПорции = РезультатыПоиска.Количество(); Попытка //навигация по результатам осуществляется так //параметр указывает откуда взять следующую/предыдущую часть РезультатыПоиска.СледующаяЧасть(50); //и так РезультатыПоиска.ПредыдущаяЧасть(35); Исключение //при достижении конца результатов будет вызвано исключение //тоже самое будет если строка поиска содержит ошибки КонецПопытки; //узнаем текущую позицию поиска ТекущееПоложения = РезультатыПоиска.НачальнаяПозиция(); Для Каждого Результат Из РезультатыПоиска Цикл //список полнотекстового поиска можно обойти в цикле //свойства элементов списка на картинке ниже КонецЦикла; //получает результаты поиска либо в виде объекта ЧтениеXML //либо в виде строки с текстом в формате HTML //в формате HTML найденные слова подсвечены, пример ниже ОтображениеПоиска = РезультатыПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст); КонецПроцедуры

Элемент списка полнотекстового поиска

Отображение поиска в формате HTML

Дополнительные словари

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

1 2 3 4 5 6 7 8 9 10 11 рунетрунета рунете рунетом ВанессаВанессе Ванессы Ванессу ошибка баг сбой стрим поток

Указать дополнительные словари можно в свойстве конфигурации «Дополнительные словари»:

Свойство «Дополнительные словари полнотекстового поиска»

Мобильная платформа

Полнотекстовый поиск на мобильной платформе работает с некоторыми ограничениями:

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

Кроме этого существуют еще некоторые особенности работы полнотекстового поиска на мобильной платформе:

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

Несмотря на автоматическое обновление индекса, иногда требуется принудительное обновление индекса, сделать это можно с помощью метода ОбновитьИндекс().

На этом все, надеюсь, что эта статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

В программе «1С:Бухгалтерия 8» (ред. 3.0) реализован механизм полнотекстового поиска во всех полях любого справочника, документа, списка и др.:

  1. Сочетание клавиш «Ctrl и F» автоматически устанавливает курсор в поле «Поиск». Начните набирать текст и поиск будет запущен автоматически.
  2. По кнопке со значком лупы (или сочетанием клавиш «Alt и F») можно выбрать «Расширенный поиск» и установить параметры поиска (рис. 1).

Рис. 1

Если работа поиска по каким-то причинам нарушена, либо осуществляется медленно, рекомендуется очистить индексы и затем обновить их (рис. 2). Эти действия доступны только пользователям с правами «Администратор».

Внимание! При работе через облачные технологии операции по очистке и обновлению индексов выполняются автоматически.

  1. Раздел: Администрирование – Общие настройки.
  2. Раскройте подраздел «Полнотекстовый поиск данных» и перейдите по ссылке «Настроить».
  3. Нажмите кнопку «Очистить индекс». Когда операция выполнится, станет доступной кнопка «Обновить индекс», нажмите ее. Дождитесь выполнения операции и закройте форму.

Рис. 2

Для автоматического обновления индексов, быстрой и корректной работы поиска должно быть настроено выполнение двух регламентных заданий – «Обновление индекса ППД» и «Слияние индекса ППД». Обычно эти регламентные задания настроены по умолчанию и выполняются в программе ежедневно по расписанию в автоматическом режиме (например, каждый день с 8.00 каждый час).

Внимание! При работе через облачные технологии регламентные задания выполняются автоматически, их настройка не требуется.

  1. Раздел: Администрирование – Обслуживание.
  2. Раскройте подраздел «Регламентные операции» и перейдите по ссылке «Регламентные и фоновые задания».
  3. В сформированном списке установите флажки у заданий «Обновление индекса ППД» и Слияние индекса ППД».
  4. Поочередно двойным щелчком мыши откройте каждое задание, перейдите по ссылке «Расписание».
  5. В форме «Расписание» на закладке «Общее» указываются дата начала и завершения задания и режим повтора.
  6. На закладке «Дневное» укажите время начала задания и время повтора.
  7. На закладке «Недельное» и «Месячное» проверьте установку флажков по дням недели и по месяцам.
  8. Кнопка «ОК», затем кнопка «Записать и закрыть».

Рис. 3