Полнотекстовый поиск
Полнотекстовый поиск данных — это инструмент «1С:Шины», позволяющий выполнять поиск записей в базе данных по их текстовым представлениям.
Механизм полнотекстового поиска включает:
- программные средства для формирования полнотекстового индекса и его периодического обновления;
- программные средства для поиска по полнотекстовому индексу и оформления результатов поиска;
- полнотекстовый индекс, содержащий текстовые представления всех записей базы данных.
Для полноценной р аботы полнотекстового поиска в приложении необходимо включить настройку Автозапуск запланированных заданий:
По умолчанию «1С:Шина» индексирует следующие объекты:
- планы обмена,
- регистры сведений,
- хранимые структуры,
- файлы хранилища двоичных данных:
- офисные документы (doc, docx, pdf, odt, rtf, ...),
- простой текст (txt, md, csv, ...),
- электронные таблицы (xls, xlsx, ods, ...),
- презентации (ppt, pptx, odp, ...),
- архивы (zip, rar, 7z, ...).
Для каждого объекта вы можете указать, нужно ли учитывать его данные при индексировании. Для этого используйте следующие свойства:
- для реквизитов сущностей —
ИспользоватьВПолнотекстовомПоиске
, - для файлов двоичного хранилища —
ДвоичныйОбъект.Свойства.ИспользованиеПолнотекстовогоПоиска
.
Выполнение полнотекстового поиска
Для работы с функциями полнотекстового поиска во встроенном языке используется тип-одиночка ПолнотекстовыйПоиск
. Методы данного типа позволяют выполнить все необходимые операции по управлению и использованию полнотекстового поиска: проверить актуальность поискового индекса, получить количество непроиндексированных изменений, перестроить индекс и вызвать функцию поиска.
Для выполнения полнотекстового поиска вызовите метод Искать()
и укажите поисковое выражение в виде строки или экземпляра структуры ЗапросПолнотекстовогоПоиска
. Вы также можете настроить результаты поиска и задать область поис ка.
Пример поиска по справочнику Сотрудники:
@НаСервере @ДоступноСКлиента
статический метод ВыполнитьПоиск(СтрокаПоиска: Строка): ЧитаемыйМассив<Сущность.Ключ>
возврат ПолнотекстовыйПоиск.Искать(ПоисковыйЗапрос = СтрокаПоиска, ИндексСтраницы = 0,
РазмерСтраницы= 50, ОбластьПоиска = [Тип<Сотрудники.Ссылка>])
;
Настройки результатов полнотекстового поиска
Чтобы настроить результаты поиска, используйте свойства типа НастройкиРезультатаПолнотекстовогоПоиска
:
ПолучатьЗаголовки
— указывает, нужно ли возвращать заг оловки (краткое представление) по каждой найденной записи.ПолучатьФрагменты
— указывает, нужно ли возвращать фрагменты текста с подсветкой найденных вхождений. Для получения оформленного набора фрагментов используйте методЭлементРезультатаПолнотекстовогоПоиска.Представление()
.ПолучатьФрагментыПоСвойствам
— указывает, нужно ли заполнять массивЭлементРезультатаПолнотекстовогоПоиска.ФрагментыПоСвойствам
, в котором фрагменты текста разделены по свойствам. Используйте данный режим, если вам требуется получить метаданные по свойствам и информацию по каждому фрагменту в контексте свойства.НастройкиФрагментов
— позволяет настроить представление найденных фрагментов текста.
@НаСервере @ДоступноСКлиента
статический метод ВыполнитьПоиск(Запрос: Строка): Массив<Строка>
// Настройка результатов полнотекстового поиска
знч НастройкиРезультата = новый НастройкиРезультатаПолнотекстовогоПоиска(
ПолучатьЗаголовки = Истина,
ПолучатьФрагменты = Истина,
НастройкиФрагментов = новый НастройкиФрагментовПолнотекстовогоПоиска(
ВидФрагмента = ВидФрагментаПолнотекстовогоПоиска.Html,
МаксимальноеКоличествоФрагментов = 10,
РазмерФрагмента = 150,
ОткрывающийТег = "<strong>",
ЗакрывающийТег = "</strong>"))
знч МассивФрагментовТекста = <Строка>[]
// Выполнение поиска с заданными настройками
знч РезультатПоиска = ПолнотекстовыйПоиск.Искать(
новый ЗапросПолнотекстовогоПоиска(
Запрос = Запрос,
ИндексСтраницы = 0,
РазмерСтраницы = 50),
НастройкиРезультата)
// Заполнение массива найденных фрагментов текста
для Элемент из РезультатПоиска.Порция
МассивФрагментовТекста.Добавить(Элемент.Представление())
;
во зврат МассивФрагментовТекста
;
Представление результатов полнотекстового поиска
Найденные в результате поиска фрагменты текста могут быть представлены следующими способами:
-
Собраны в стандартное представление с помощью метода
Представление()
типаЭлементРезультатаПолнотекстовогоПоиска
. По умолчанию составной фрагмент оформляется так:- Все разрывы фрагментов обозначаются троеточием
...
. - Табличные части выводятся в сокращенном виде:
Представление: ...Вхождение1... ...Вхождение2...
. - Если запись найдена по основному тексту, среди фрагментов будут свойства с выделенными (подсвеченными) вхождениями.
- Если запись найдена не по основному тексту, тогда выводятся несколько первых наиболее приоритетных свойств без выделения вхождений.
- Все разрывы фрагментов обозначаются троеточием
-
Разделены по свойствам: будет заполнен массив
ЭлементРезультатаПолнотекстовогоПоиска.ФрагментыПоСвойствам
. В одном свойстве может быть более одного текстового фрагмента. Фрагмент может быть полным значением свойства. Вместе с фрагментом также предоставляется список вхождений. -
Собраны в одно представление с помощью метода
ПостроитьПредставление()
типаРезультатПолнотекстовогоПоиска
. Используйте данный метод, если вам требуется настроить вывод результатов поиска. Вы можете указать разделитель свойств и символы для разрыва текста слева, справа и в середине; включить в представление дополнительные свойства; вывести фрагменты по табличным частям в упрощенном виде. Пример:@НаСервере @ДоступноСКлиента
статический метод ВыполнитьПоиск(Запрос: Строка): Массив<Строка>
знч МассивФрагментовТекста = <Строка>[]
// Выполнение поиска
знч РезультатПоиска = ПолнотекстовыйПоиск.Искать(
новый ЗапросПолнотекстовогоПоиска(
Запрос = Запрос,
ИндексСтраницы = 0,
РазмерСтраницы = 50)
)
// Заполнение массива найденных фрагментов текста
// c настройкой их представления
для Элемент из РезультатПоиска.Порция
знч Представление = РезультатПолнотекстовогоПоиска.ПостроитьПредставление(
ИсточникФрагментов = Элемент,
РазрывТекстаВСередине = "...",
РазделительСвойств = "<br/>")
МассивФрагментовТекста.Добавить(Представление)
;
возврат МассивФрагментовТекста
;