Полнотекстовый поиск 1с что это
Перейти к содержимому

Полнотекстовый поиск 1с что это

  • автор:

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

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

Основные возможности полнотекстового поиска

  • Он функционирует в клиент-серверном варианте работы и в автономном сервере;
  • Вместо морфологических словарей он использует экспертные алгоритмы выделения корневой основы (stemming);
  • Все токены, включая составные слова, индексируются как целиком, так и по частям независимо от режима разделения составных слов;
  • Весь текст индексируется как есть, без приведения к нормальной форме. Это позволяет искать слова как в морфологическом режиме (префиксный поиск), так и в строгой падежной форме;
  • При индексации выкидываются (удаляются) шумовые-слова. Это некоторые предлоги, причастия, междометия, которые не несут самостоятельной смысловой нагрузки.

Полнотекстовый поиск в базе данных

Механизм полнотекстового поиска в данных системы 1С:Предприятие 8 позволяет осуществлять поиск в базе данных с указанием поисковых операторов (И, ИЛИ, НЕ, РЯДОМ и др.).

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

Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме 1С:Предприятие 8, или программно, средствами встроенного языка. Ниже приведен диалог управления полнотекстовым индексированием в режиме 1С:Предприятие:

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

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

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

Система 1С:Предприятие 8 позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Также существует возможность ограничить область поиска данными только указанных объектов конфигурации.

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

В справочной системе 1С:Предприятия 8 также реализован полнотекстовый поиск, позволяющий использовать поисковые операторы И, ИЛИ, НЕ, РЯДОМ и др. При этом найденные слова выделяются.

Полнотекстовый поиск в "1С:Предприятии 8.1"

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

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

  1. Есть поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ 7.79-2000). Пример: «русская фраза» = «russkaya fraza».
  2. Есть поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами). Пример: «руссrfz фраpf» (окончания каждого слова набраны латиницей, допустим, в результате ошибки оператора).
  3. Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово «привет» и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: «привет», «превет», «привед».
  4. Есть возможность указать область выполнения поиска по выбранным объектам метаданных.
  5. Полнотекстовое индексирование названий стандартных полей («Код», «Наименование» и т. д.) производится на всех языках конфигурации.
  6. Поиск выполняется с учетом синонимов русского, английского и украинского языков.
  7. Морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ «1С:Предприятие».
  8. Стандартно в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, которые предоставлены компанией «Информатик».
  9. Поиск можно осуществлять с использованием подстановочных символов («*»), а также с указанием поисковых операторов («И», «ИЛИ», «НЕ», «РЯДОМ») и спецсимволов.

Полнотекстовый поиск можно осуществлять в любой конфигурации на платформе «1С:Предприятие 8.1».

Это касается и конфигураций, которые были сконвертированы из версии 8.0. Для включения возможностей использования полнотекстового поиска, достаточно зайти в меню «Операции» вашей конфигурации и выбрать пункт «Управление полнотекстовым поиском», после чего включить эту возможность (см. рис. 1).

Если вы используете типовые конфигурации на платформе 8.1, то, скорее всего, в них уже встроена обработка «Поиск данных» (меню «Сервис»/»Поиск данных»). Если же такая обработка отсутствует в используемой конфигурации, не беда.

Ее всегда можно найти на диске ИТС. В этой статье мы будем использовать для демонстрации возможностей полнотекстового поиска примеры работы именно этой обработки в демонстрационной конфигурации «Бухгалтерия предприятия» (ред. 1.6).

Как уже было сказано, поиск может осуществляться по нескольким словам, с использованием поисковых операторов и по точной фразе. Кроме того, место поиска можно ограничивать конкретными объектами конфигурации (например, документы «Акт об оказании производственных услуг») или списком/набором объектов конфигурации.

При поиске данных допускается использование поисковых операторов в строке поиска (все операторы необходимо указывать только ЗАГЛАВНЫМИ буквами и без кавычек), указанных в таблице.

Имейте ввиду: если не указаны никакие операторы (слова набраны через пробел), программа осуществляет поиск всех слов из запроса с использованием оператора «И».

Рис. 2 демонстрирует пример простого поиска по части слова. Набрав «надеж*», мы получили в результате ссылку на физическое лицо, а также на документы, в комментариях которых встречается фраза «Надежный клиент».

Рис. 3 демонстрирует пример более сложного поиска с использованием конструкции «ИЛИ» в строке поиска и ограничения области поиска по справочнику «Номенклатура» и документам «Поступление товаров и услуг», «Реализация товаров и услуг». Наглядно видно, что поиск отразил всю номенклатуру, в названиях которой присутствует либо слово «чайник», либо слово «BINATONE», а также все документы указанных видов, содержащие всю подходящую номенклатуру.

Полнотекстовый поиск в 1С (что это и пример использования)

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

Полнотекстовый поиск предоставляет следующие возможности:

  • Есть поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ 7.79-2000). Пример: «русская фраза» = «russkaya fraza».
  • Есть поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами). Пример: «руссrfz фраpf» (окончания каждого слова набраны латиницей, допустим, в результате ошибки оператора).
  • Есть возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости. Пример: указав в строке поиска слово «привет» и нечеткость 17 %, найдем все аналогичные слова с ошибками и без: «привет», «превет», «привед».
  • Есть возможность указать область выполнения поиска по выбранным объектам метаданных.
  • Полнотекстовое индексирование названий стандартных полей («Код», «Наименование» и т. д.) производится на всех языках конфигурации.
  • Поиск выполняется с учетом синонимов русского, английского и украинского языков.
  • Морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ «1С:Предприятие».
  • Стандартно в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, которые предоставлены компанией «Информатик».
  • Поиск можно осуществлять с использованием подстановочных символов («*»), а также с указанием поисковых операторов («И», «ИЛИ», «НЕ», «РЯДОМ») и спецсимволов.

Полнотекстовый поиск можно осуществлять в любой конфигурации на платформе 1С:Предприятие 8

Для того чтобы открыть окно управления полнотекстовым поиском необходимо выполнить следующее:

Обычное приложение — пункт меню Операции — Управление полнотекстовым поиском.

Управляемое приложение — пункт меню Главное меню — Все функции — Стандартные — Управление полнотекстовым поиском.

  • Обновить индекс – Создание индекса/Обновление индекса;
  • Очистить индекс – обнуление индекса(рекомендуется после обновления всех данных);
  • пункт Разрешить слияние индексов – отвечает за слияние основного и дополнительного индекса.

Полнотекстовый поиск осуществляется при помощи полнотекстового индекса. При отсутствии индекса полнотекстовый поиск как таковой не возможен. Для того чтобы поиск имел результат, все необходимые данные должны быть включены в полнотекстовый индекс. Если пользователем введены в базу новые данные, их следует включить в рассматриваемый индекс, иначе они не будут участвовать в поиске. Чтобы этого избежать, необходимо обновлять полнотекстовый индекс. При обновлении система анализирует только определенные типы данных: Строка, Данные ссылочного типа (ссылки на документы, справочники),Число, Дата, ХранилищеЗначения. Если пользователь не имеет прав доступа к определенной информации, то он не сможет увидеть ее в результатах поиска. Следует также помнить и о том, что в свойствах объектов, по которым будет происходить поиск должно быть установлено значение Полнотекстовый Поиск – Использовать, которое задано по умолчанию.

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

Рассмотрим более подробно полнотекстовый индекс, который состоит из двух частей (индексов): основного индекса и дополнительного. Высокая скорость поиска данных обеспечивается за счет основного индекса, но обновление его происходит относительно медленно, в зависимости от объема данных. Дополнительный индекс ему противоположен. Данные добавляются в него намного быстрее, но поиск осуществляется медленнее. Система осуществляет поиск одновременно в обоих индексах. Большая часть данных находится в основном индексе, а данные добавляемые в систему попадают в дополнительный индекс. Пока объем данных в дополнительном индексе небольшой, поиск по нему происходит относительно быстро. В тот момент, когда нагрузка на систему невелика, происходит операция слияния индексов, в результате чего дополнительный индекс очищается, а все данные помещаются в основной индекс. Слияние индексов предпочтительнее выполнять в тот момент времени, когда нагрузка на систему минимальна. С этой целью можно создавать регламентированные задания и задания по расписанию.

Специальные операторы, допустимые при задании поискового выражения

Механизм полнотекстового поиска допускает написание части символов русского слова одноклавишными латинскими символами. Результат поиска при этом не измениться.

Два оператора РЯДОМ

  • упрощенный. На расстоянии 8 слов друг от друга
  • РЯДОМ/[+/-]n – поиск данных в одном реквизите на расстоянии n-1 слов между ними.

Знак указывает в каком направлении от первого слова будет поиск второго. (+ — после, — до)

Групповой символ «*» может использоваться только в качестве замены конца слова

Оператор нечеткости «#». Если неизвестно точное написание названия, имени.

Программными средствами и средствами 1с: программирование.

Оператор синонимов «!». Позволяет найти слово и его синонимы

Как программно обновить индекс полнотекстового поиска?

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

Определение переменной СписокПоиска

Кроме этого в процедуре обработки события ПриОткрыии формы определим, что эта переменная будет содержать список полнотекстового поиска, с помощью которого мы и будем осуществлять поиск в данных

Теперь для события нажатия на кнопку Найти напишем код, который позволит нам выполнять поиск в соответствии с тем выражением, которое задано в поле ПоисковоеВыражение

Сначала в этой процедуре мы устанавливаем поисковое выражение, введенное пользователем, в качестве строки поиска для полнотекстового поиска. Затем выполняем метод ПерваяЧасть(), который собственно запускает полнотекстовый поиск и возвращает первую порцию результатов. По умолчанию порция содержит 20 элементов. После этого мы анализируем количество элементов в списке поиска. Если он не содержит ни одного элемента, то мы выводим в форму соответствующее сообщение. В противном случае вызывается процедура ВывестиРезультатПоиска(), которая отображает полученные результаты пользователю.

Создадим в модуле формы процедуру с таким именем и напишем в ней код,

Действия, выполняемые в этой процедуре, просты. Сначала мы формируем сообщение о том, какие элементы отображены и сколько всего элементов найдено. Затем получаем результат полнотекстового поиска в виде HTML-текста и выводим этот текст в поле HTML-документа, расположенное в форме.

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

Теперь необходимо создать обработчики событий нажатия на кнопки ПредыдущаяПорция() и СледующаяПорция().

Заключительным «штрихом» будет создание обработчика события onclick поля HTML-документа, расположенного в форме. Дело в том, что результат полнотекстового поиска, представленный в виде HTML-текста, содержит гиперссылки на номера элементов списка поиска. И нам хотелось бы, чтобы при переходе пользователя на эту ссылку система открывала бы форму того объекта, который содержится в этом элементе списка. Для этого мы будем перехватывать событие onclick HTML-документа, содержащегося в поле HTML-документа, получать номер элемента списка из гиперссылки и открывать форму соответствующего объекта. Текст обработчика события onclick поля HTML-документа представлен в коде

Полнотекстовый поиск по информационной базе 1С

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

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

  • Полнотекстовый индекс;
  • Средства выполнения поиска.
Полнотекстовый индекс

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

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

Если установлено значение «Использовать», объект информационной базы будет участвовать в полнотекстовом поиске.

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

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

Управлять полнотекстовым индексом можно из режима» 1С Предприятие» или программно.

В режиме «1С Предприятие»

В режиме «1С Предприятие» доступ к требуемому функционалу осуществляется с помощью меню «Все функции» — «Стандартные» — «Управление полнотекстовым поиском».

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

Кнопка «Настройка» открывает диалоговое окно включения и отключения полнотекстового поиска как такового.

В программном коде

Для работы с полнотекстовым поиском в программном коде существует специальный объект «Полнотекстовый поиск».

Обновление полнотекстового индекса возможно в двух режимах:

  • Полное;
  • Частичное.

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

Для этого в методе ОбновитьИндекс в первом параметре передаётся значение «Истина» (второй имеет значение по умолчанию «Ложь»).

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

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

Второй режим применяется для быстрого обновления, так как данные обновляются отдельными порциями, максимальный размер которых составляет 10 000 записей. При этом за один раз обрабатывается только одна порция. То есть, если нужно обновить 25 000 записей, быстрое обновление придётся выполнить три раза.

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

При быстром обновлении значение первого параметра остаётся по умолчанию («Ложь»), а во втором параметре передаётся наоборот «Истина». Тогда слияния не произойдет, и данные будут обновляться каждый раз частично.

Очистка индекса производится при помощи метода ОчиститьИндекс. Он не принимает никаких параметров.

Важно:

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

Включение и отключение полнотекстового поиска производится при помощи метода УстановитьРежимПолнотекстовогоПоиска. Он принимает единственный параметр типа РежимПолнотекстовогоПоиска.

Для включения полнотекстового поиска передаём РежимПолнотекстовогоПоиска.Разрешить

Для отключения РежимПолнотекстовогоПоиска.Запретить

Реализация полнотекстового поиска

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

Реализовать его можно при помощи такого объекта конфигурации как «Отчёт».

Для этого в режиме конфигуратор создаём новый «Отчёт» и сразу же создаём для него основную форму.

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

Внешний вид отчёта по поиску

Для работы с полнотекстовым поиском нам потребуются:

  • Три команды:
    • Поиск – Осуществляет непосредственно поиск данных;
    • Предыдущая – переход на предыдущую страницу поисковой выдачи;
    • Следующая – переход на предыдущую страницу поисковой выдачи.
    • Поисковое выражение – строка поиска;
    • РезультатПоиска – (строка) отображает результаты поиска. Для отображения сразу устанавливаем в свойстве «Вид» значение «Поле HTML документа»;
    • РезультатыПоиска – (список значений) Вспомогательный реквизит для хранения информации о найденных объектах информационной базы;
    • СообщенииеОРезультате – (строка) выводит сообщение о результатах поиска.;
    • ТекущаяПозиция – (число) вспомогательный реквизит, хранит условный номер страницы результатов поиска.

    Поиск может выдать результат достаточно большого объёма. Поэтому сразу предусматриваем условное разделение их на страницы для удобства работы. Собственно для этого и созданы команды «Предыдущая», «Следующая» и реквизит «Текущая позиция».

    Для работы формы поиска на форме необходимо разместить только все три команды, а также реквизиты «Поисковое выражение», «РезультатПоиска» и «СообщенииеОРезультате».

    Всё вышеперечисленные элементы можно располагать по своему усмотрению. Возможный вариант их расположения:

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

    Нужно реализовать программную логику работы с полнотекстовым поиском.

    Основной механизм полнотекстового поиска и обработки его результатов

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

    Получаем результаты поиска по введённой поисковой фразе и выбираем из них соответствующую часть.

    Какую именно часть следует выбрать, определяем с помощью значения числового флага:

    • Значение «0» – выбираем самую первую часть результатов поиска;
    • Значение «1» – выбираем следующую часть (страницу) результатов поиска относительно текущей позиции;
    • Значение «-1» – выбираем предыдующую часть (страницу) результатов поиска относительно текущей позиции.

    Далее получаем информацию о каждом найденном объекте информационной базы и добавляем её в список РезультатыПоиска.

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

    Сохраняем текущую позицию (условный номер текущей части (страницы) и общее количество частей (страниц) в поисковой выдаче.

    В завершение обработки результатов поиска отображаем информацию о результатах поиска и устанавливаем доступность команд «Предыдущая» и «Следующая».

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

    Приведённая процедура является основой выполнения полнотекстового поиска и представляет наиболее сложный его компонент.

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

    Реализация клиентских команд и доступа к найденным объектам

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

    Смысл параметров передаваемых процедуре Искать подробно описан в предыдущем подразделе.

    Для того чтобы получить доступ найденным объектам необходимо получить из результатов поиска ссылку на тот или иной конкретный объект и открыть его по этой ссылке. Лучше всего это сделать при обработке события ПриНажатии элемента формы РезультатПоиска.

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

    Варианты обновления полнотекстового индекса

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

    Как уже было сказано выше, возможны два варианта обновления полнотекстового индекса:

    • Вручную (через меню «Все функции»);
    • При помощи программного кода.

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

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

    Но, такой подход требует наличие постоянно работающего сервера или, в крайнем случае, обычного компьютера на котором 1С Предприятие будет работать в режиме толстого клиента.

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

    Ручное обновление незаменимо при работе с информационной базой в файловом режиме в одно лицо или в составе небольшой группы.

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

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

    2 комментария

    Добрый день. Алгоритм полнотекстового поиска реализован в самописной конфе. Проблема заключается в сложной системе настройки прав к объектам (через регистр сведений), т.е. автоматом не убираются документы на которые у пользователя нет прав. По сути вопроса: РезПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); далее определяем где именно искать и размеры порций. В результате есть список найденных документов в переменной РезПоиска. Затем я проверяю права на полученные документы в РезПоиска, в итоге мне нужно отсеять те документы из общего списка на которые у тек. пользователя нет прав. Подскажите, как это можно реализовать? СПс.

    Здравствуйте, Дмитрий. В 1С есть возможность обратиться к реквизитам и свойствам тех объектов, которые были найдены в результате полнотекстового поиска. Опираясь на это, можно разработать алгоритм отбора. На сайте есть статья, в которой на простом примере описан принцип подобной фильтрации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *