Механизм полнотекстового поиска (1Cv8) — различия между версиями
(Новая страница: «Категория:Программирование в 1Cv82 __TOC__ ==Механизм полнотекстового поиска== Источник: http://v8...») |
м (→Полнотекстовый поиск в справочной системе) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | [[Категория:Программирование в | + | [[Категория:Программирование в 1Cv8]] |
− | __TOC__ | + | {| align="right" |
+ | | __TOC__ | ||
+ | |} | ||
==Механизм полнотекстового поиска== | ==Механизм полнотекстового поиска== | ||
Источник: http://v8.1c.ru/overview/fulltext.htm | Источник: http://v8.1c.ru/overview/fulltext.htm | ||
Строка 27: | Строка 29: | ||
Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме 1С:Предприятие 8, или программно, средствами встроенного языка. Ниже приведен диалог управления полнотекстовым индексированием в режиме 1С:Предприятие: | Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме 1С:Предприятие 8, или программно, средствами встроенного языка. Ниже приведен диалог управления полнотекстовым индексированием в режиме 1С:Предприятие: | ||
− | |||
− | |||
Для выполнения поиска данных в базе данных может использоваться, например, обработка Поиск данных, представленная ниже. | Для выполнения поиска данных в базе данных может использоваться, например, обработка Поиск данных, представленная ниже. | ||
Строка 35: | Строка 35: | ||
Система 1С:Предприятие 8 позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Также существует возможность ограничить область поиска данными только указанных объектов конфигурации. | Система 1С:Предприятие 8 позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Также существует возможность ограничить область поиска данными только указанных объектов конфигурации. | ||
− | |||
− | |||
===Полнотекстовый поиск в справочной системе=== | ===Полнотекстовый поиск в справочной системе=== | ||
− | |||
В справочной системе 1С:Предприятия 8 также реализован полнотекстовый поиск, позволяющий использовать поисковые операторы И, ИЛИ, НЕ, РЯДОМ и др.. При этом найденные слова выделяются. | В справочной системе 1С:Предприятия 8 также реализован полнотекстовый поиск, позволяющий использовать поисковые операторы И, ИЛИ, НЕ, РЯДОМ и др.. При этом найденные слова выделяются. | ||
− | |||
− | |||
==Программный интерфейс== | ==Программный интерфейс== | ||
Строка 53: | Строка 48: | ||
МенеджерПолнотекстовогоПоиска имеет методы для построения индекса поиска, проверки его актуальности, а также создания списка поиска типа СписокПолнотекстовогоПоиска по заданному запросу. | МенеджерПолнотекстовогоПоиска имеет методы для построения индекса поиска, проверки его актуальности, а также создания списка поиска типа СписокПолнотекстовогоПоиска по заданному запросу. | ||
− | МенеджерПолнотекстовогоПоиска доступен как свойство [[Глобальный контекст | + | МенеджерПолнотекстовогоПоиска доступен как свойство [[Глобальный контекст 1Cv8|глобального контекста]] ПолнотекстовыйПоиск. |
СписокПолнотекстовогоПоиска предоставляет доступ к результатам поиска. Кроме того, можно указать область поиска в виде массива элементов метаданных конфигурации. | СписокПолнотекстовогоПоиска предоставляет доступ к результатам поиска. Кроме того, можно указать область поиска в виде массива элементов метаданных конфигурации. |
Текущая версия на 19:55, 3 декабря 2024
Механизм полнотекстового поиска
Источник: http://v8.1c.ru/overview/fulltext.htm
Основные возможности полнотекстового поиска
- поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ);
- поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами);
- возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости;
- возможность указания области выполнения поиска по выбранным объектам метаданных;
- представление результатов поиска в формате XML и HTML с выделением найденных слов;
- полнотекстовое индексирование названий стандартных полей ("Код", "Наименование" и т.д.) на всех языках конфигурации;
- выполнение поиска с учетом синонимов русского, английского и украинского языков;
- морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ 1С:Предприятие;
- возможность использования дополнительных словарей полнотекстового поиска;
- в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, предоставленные компанией "Информатик".
Полнотекстовый поиск в базе данных
Механизм полнотекстового поиска в данных системы 1С:Предприятие 8 позволяет осуществлять поиск в базе данных с указанием поисковых операторов (И, ИЛИ, НЕ, РЯДОМ и др.).
Механизм полнотекстового поиска основан на использовании двух составляющих:
- полнотекстового индекса, который создается для текущей базы данных и затем периодически, по мере необходимости, обновляется;
- средств выполнения полнотекстового поиска.
Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме 1С:Предприятие 8, или программно, средствами встроенного языка. Ниже приведен диалог управления полнотекстовым индексированием в режиме 1С:Предприятие:
Для выполнения поиска данных в базе данных может использоваться, например, обработка Поиск данных, представленная ниже.
В представленном примере найдены документы, реквизиты которых содержат значения, начинающиеся на "Компл" и "вент" - контрагент "Комплетк ТД" и реквизиты, содержащие различные формы слова "вентилятор".
Система 1С:Предприятие 8 позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Также существует возможность ограничить область поиска данными только указанных объектов конфигурации.
Полнотекстовый поиск в справочной системе
В справочной системе 1С:Предприятия 8 также реализован полнотекстовый поиск, позволяющий использовать поисковые операторы И, ИЛИ, НЕ, РЯДОМ и др.. При этом найденные слова выделяются.
Программный интерфейс
Используются следующие прикладные объекты:
- МенеджерПолнотекстовогоПоиска
- СписокПолнотекстовогоПоиска
- ЭлементСпискаПолнотекстовогоПоиска
МенеджерПолнотекстовогоПоиска имеет методы для построения индекса поиска, проверки его актуальности, а также создания списка поиска типа СписокПолнотекстовогоПоиска по заданному запросу.
МенеджерПолнотекстовогоПоиска доступен как свойство глобального контекста ПолнотекстовыйПоиск.
СписокПолнотекстовогоПоиска предоставляет доступ к результатам поиска. Кроме того, можно указать область поиска в виде массива элементов метаданных конфигурации.
Результатом поиска является ЭлементСпискаПолнотекстовогоПоиска.
Операторы строки поиска
В строке ввода допускается использование следующих поисковых операторов:
И (AND или #) - поиск данных, содержащих все слова; пример: "запись И документ" - в реквизитах должны быть и "проведение" и "документ" (с учетом морфологии);
ИЛИ (OR или | или ,) - поиск хотя бы одного слова из перечисленных; пример: "запись ИЛИ документ" - в реквизитах должно быть хотя бы одно из слов "запись" или "документ";
НЕ (NOT или ~) - поиск данных, в реквизитах которых есть первое слово, но нет второго; пример: "закрытие НЕ месяц" - будут найдены все, содержащие "закрытие", но не содержащие слова "месяц". Использование "~" в начале строки не допускается;
РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.
Знак указывает, в каком направлении от первого слова будет искаться второе слово ("+" – после первого; "-" – до первого слова).
Если знак не указан, то будет найдены данные, содержащие указанные слова на дистанции n слов друг о друга.
Порядок слов не имеет значения.
- "фен РЯДОМ/3 воздух" - будут найдены данные, в которых "воздух" находится не более 3-х слов до или после "фен";
- фен РЯДОМ/+3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов после "фен";
- фен РЯДОМ/-3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов перед "фен".
РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";
"" (текст в кавычках) - поиск точной с учетом морфологии фразы , пример: "проведение документа" - эквивалентно: проведение /1 документа;
() - группировка слов (сколько угодно уровней вложенности); пример: "(проведение | выписка) # (счета, документа)";
* - поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: "доку*" - найдет "документ", "документировать", "документальный" и др.;
# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";
! - поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".
Если не указано никаких операторов (слова набраны через пробел), то программа осуществляет поиск всех слов из запроса с использованием оператора И.
Написание операторов И (AND), ИЛИ (OR), НЕ (NOT), РЯДОМ (NEAR) допускается только в верхнем регистре |
Операторы не используются как унарные (в начале строки поиска). Например, нельзя сделать выбор всех глав, в которых отсутствует указанный текст |
Примеры
СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок("", 20);
СписокПоиска.ПолучатьОписание = Истина;
...
МассивМД = Новый Массив();
МассивМД.Добавить(Метаданные.Справочники.Товары);
МассивМД.Добавить(Метаданные.Документы.КассовыйЧек);
СписокПоиска.ОбластьПоиска = МассивМД;
СписокПоиска.СтрокаПоиска = ПолеВводаПоиска;
СписокПоиска.РазмерПорции = РазмерПорции;
СписокПоиска.ПерваяЧасть();
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
Если СписокПоиска.СлишкомМногоРезультатов() Тогда
Предупреждение("Слишком много результатов, уточните запрос.");
КонецЕсли;
Возврат;
КонецЕсли;
Колво = СписокПоиска.ПолноеКоличество();
СтрHTML = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
Сообщить(СтрHTML);
Для каждого индекс=0 По СписокПоиска.Количество-1 Цикл
элемент = СписокПоиска.Получить(индекс);
Сообщить(элемент.Представление);
КонецЦикла;
Особенности
Полнотекстовый поиск работает по всему массиву данных, поэтому при использовании надо обязательно пропускать результат через фильтр безопасности.
Например, в мультибазной системе нужно отсекать объекты других баз.
Кроме того, такая фильтрация тесно пересекается с контролем доступа. Известно, что очень часто "дырой" в безопасности являются как раз механизмы поиска.