Тип: Строка. Содержит поисковое выражение для поиска в реквизитах данных (содержит как слова, которые нужно найти, так и поисковые операторы - И, ИЛИ, НЕ, РЯДОМ, скобки, кавычки). Поиск может осуществляться по нескольким словам, с использованием поисковых операторов и поиском по точной фразе. В строке ввода допускается использование следующих поисковых операторов: И (AND или #) - поиск данных, содержащих все слова; пример: "запись И документ" - в реквизитах должны быть и "проведение", и "документ" (с учетом морфологии); ИЛИ (OR или | или ,) - поиск хотя бы одного слова из перечисленных; пример: "запись ИЛИ документ" - в реквизитах должно быть хотя бы одно из слов "запись" или "документ"; НЕ (NOT или ~) - поиск данных, в реквизитах которых есть первое слово, но нет второго; пример: "закрытие НЕ месяц" - будут найдены все, содержащие "закрытие", но не содержащие слова "месяц". Использование "~" в начале строки не допускается; РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами. Знак указывает, в каком направлении от первого слова будет искаться второе слово ("+" – после первого; "-" – до первого слова). Если знак не указан, то будет найдены данные, содержащие указанные слова на дистанции n слов друг о друга. Порядок слов не имеет значения. "фен РЯДОМ/3 воздух" - будут найдены данные, в которых "воздух" находится не более 3-х слов до или после "фен"; фен РЯДОМ/+3 воздух - будут найдены данные,
Полное описание, параметры и ограничения
СписокПолнотекстовогоПоиска.СтрокаПоиска (FullTextSearchList.SearchString)
СписокПолнотекстовогоПоиска (FullTextSearchList)
СтрокаПоиска (SearchString)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Содержит поисковое выражение для поиска в реквизитах данных (содержит как слова, которые нужно найти, так и поисковые операторы - И, ИЛИ, НЕ, РЯДОМ, скобки, кавычки).
Поиск может осуществляться по нескольким словам, с использованием поисковых операторов и поиском по точной фразе.
В строке ввода допускается использование следующих поисковых операторов:
И (AND или #) - поиск данных, содержащих все слова; пример: "запись И документ" - в реквизитах должны быть и "проведение", и "документ" (с учетом морфологии);
ИЛИ (OR или | или ,) - поиск хотя бы одного слова из перечисленных; пример: "запись ИЛИ документ" - в реквизитах должно быть хотя бы одно из слов "запись" или "документ";
НЕ (NOT или ~) - поиск данных, в реквизитах которых есть первое слово, но нет второго; пример: "закрытие НЕ месяц" - будут найдены все, содержащие "закрытие", но не содержащие слова "месяц". Использование "~" в начале строки не допускается;
РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.
Знак указывает, в каком направлении от первого слова будет искаться второе слово ("+" – после первого; "-" – до первого слова).
Если знак не указан, то будет найдены данные, содержащие указанные слова на дистанции n слов друг о друга. Порядок слов не имеет значения.
"фен РЯДОМ/3 воздух" - будут найдены данные, в которых "воздух" находится не более 3-х слов до или после "фен";
фен РЯДОМ/+3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов после "фен";
фен РЯДОМ/-3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов перед "фен".
РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";
"" (текст в кавычках) - поиск точной с учетом морфологии фразы , пример: "проведение документа" - эквивалентно: проведение /1 документа;
() - группировка слов (сколько угодно уровней вложенности); пример: "(проведение | выписка) # (счета, документа)";
* - поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: "доку*" - найдет "документ", "документировать", "документальный" и др.;
# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";
! - поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".
Если не указано никаких операторов (слова набраны через пробел), то программа осуществляет поиск всех слов из запроса с использованием оператора И.
Замечание 1. Написание операторов И (AND), ИЛИ (OR), НЕ (NOT), РЯДОМ (NEAR) допускается только в верхнем регистре.
Замечание 2. Операторы не используются как унарные (в начале строки поиска). Например, нельзя сделать выбор всех глав, в которых отсутствует указанный текст.
Ограничение. При использовании нечеткого и группового поиска (операторы "*" и "#") может быть найдено несколько слов. Общее число найденных слов не может превышать 300.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Найти только три собственных учебных товара, а не всю базу
СоздатьСписок создаёт настройки; первый поиск выполняется вызовом ПерваяЧасть. Список текущей порции и общее количество — разные значения.
Где и как запускать
Полный серверный общий модуль УчебныйПолнотекстовыйПоиск своей отдельной учебной базы.
Подготовка
Используйте только отдельную собственную конфигурацию УчебнаяКонфигурацияСинтаксиса с собственным справочником УчебныеТовары. Включите использование полнотекстового поиска у справочника и Наименование в своей учебной конфигурации.
Вручную создайте ровно три товара: Учебномаяк Книга, Учебномаяк Ручка, Учебномаяк Коробка. Код урока не создаёт и не записывает эти товары. Маркер Учебномаяк нужен, чтобы не искать реальные сведения.
Создайте серверный общий модуль УчебныйПолнотекстовыйПоиск с флагом Сервер, вставьте весь модуль выбранного урока. Из серверного обработчика своей учебной обработки вызовите УчебныйПолнотекстовыйПоиск.ВыполнитьПример().
Сначала вручную разрешите поиск и обновите индекс своей учебной базы либо используйте отдельный урок обновления. Для опытов поиска индекс должен быть актуален, пользователь должен иметь чтение всех трёх собственных товаров.
Для административных уроков нужен единственный пользователь УчебныйПользовательСинтаксиса, право Администрирование, монопольный сеанс без разделителей данных. В этих уроках используется только Версия1; Версия2 требует отдельной подготовки поискового сервера.
Первый запуск административного урока делайте с пустым подтверждением. Не используйте рабочую базу или копию с реальными данными. Обслуживание меняет индекс/настройки и может занимать время, но не должно подменяться удалением товаров.
Процедура ВыполнитьПример() Экспорт
Если НЕ ПолнотекстовыйПоиск.ИндексАктуален() Тогда
ВызватьИсключение "Сначала обновите индекс своей отдельной учебной базы";
КонецЕсли;
Список = ПолнотекстовыйПоиск.СоздатьСписок("учебномаяк", 2);
Область = Новый Массив;
Область.Добавить(Метаданные.Справочники.УчебныеТовары);
Список.ОбластьПоиска = Область;
Список.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать;
Список.ОграничиватьСтрокуПоиска = Истина;
Список.ПолучатьПредставление = Истина;
Список.ПолучатьОписание = Истина;
Список.ПорогНечеткости = 0;
Сообщить(Список.СтрокаПоиска = "учебномаяк");
Сообщить(Список.РазмерПорции = 2);
Сообщить(Список.ОбластьПоиска.Количество() = 1);
Сообщить(Список.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать);
Сообщить(Список.ОграничиватьСтрокуПоиска);
Сообщить(Список.ПолучатьОписание И Список.ПолучатьПредставление);
Сообщить(Список.ПорогНечеткости = 0);
Список.ПерваяЧасть();
Сообщить(Список.НачальнаяПозиция() = 0);
Сообщить("В текущей порции: " + Строка(Список.Количество()));
Сообщить("Всего найдено: " + Строка(Список.ПолноеКоличество()));
Сообщить("Результаты усечены: " + Строка(Список.СлишкомМногоРезультатов()));
Для Индекс = 0 По Список.Количество() - 1 Цикл
РезультатПоиска = Список.Получить(Индекс);
Сообщить(РезультатПоиска.Метаданные = Метаданные.Справочники.УчебныеТовары);
Сообщить(ТипЗнч(РезультатПоиска.Значение) = Тип("СправочникСсылка.УчебныеТовары"));
Сообщить("Представление: " + РезультатПоиска.Представление);
Сообщить("Контекст: " + РезультатПоиска.Описание);
КонецЦикла;
КонецПроцедурыРазбор по шагам
Убедиться в актуальности уже подготовленного индекса. Создать поиск по маркеру с размером порции 2.
ОбластьПоиска содержит метаданные только собственного справочника. Поиск метаданных выключен, чтобы не получать конфигурационные команды вместо товаров.
Настройки описания и представления включить до ПерваяЧасть. Явно ограничить длину запроса, оставить нечёткость 0.
После ПерваяЧасть получить количество текущей порции, общее число и признак усечения. Обойти только допустимые индексы порции.
Для каждого результата прочитать объектную ссылку, метаданные, представление и контекст. Ничего не открывать и не записывать.
Как проверить результат
Булевы проверки настроек и типов Истина. При ровно трёх доступных проиндексированных товарах первая порция 2, всего 3, усечение Ложь.
Порядок Книги/Ручки/Коробки не фиксируется: индекс полнотекстового поиска не является сортировкой по наименованию.
Ожидаемый результат
Получена ограниченная реальная поисковая выдача с объяснением четырёх свойств её элементов.
На что обратить внимание
В ОбластьПоиска нельзя подставлять метаданные отдельного реквизита или табличной части; нужны основные объекты.
Результаты учитывают доступ пользователя. Пустой список может означать права, неактуальность или отсутствие индекса, а не обязательно отсутствие товара.
Элементы выдачи только для чтения. Изменить Представление не означает переименовать товар.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
И, ИЛИ и НЕ в поиске учебных товаров
Поисковое выражение — не текст Запроса 1С и не SQL. Меняем только выражение собственного списка, после каждого изменения заново вызываем ПерваяЧасть.
Где и как запускать
Полный серверный общий модуль УчебныйПолнотекстовыйПоиск своей отдельной учебной базы.
Подготовка
Используйте только отдельную собственную конфигурацию УчебнаяКонфигурацияСинтаксиса с собственным справочником УчебныеТовары. Включите использование полнотекстового поиска у справочника и Наименование в своей учебной конфигурации.
Вручную создайте ровно три товара: Учебномаяк Книга, Учебномаяк Ручка, Учебномаяк Коробка. Код урока не создаёт и не записывает эти товары. Маркер Учебномаяк нужен, чтобы не искать реальные сведения.
Создайте серверный общий модуль УчебныйПолнотекстовыйПоиск с флагом Сервер, вставьте весь модуль выбранного урока. Из серверного обработчика своей учебной обработки вызовите УчебныйПолнотекстовыйПоиск.ВыполнитьПример().
Сначала вручную разрешите поиск и обновите индекс своей учебной базы либо используйте отдельный урок обновления. Для опытов поиска индекс должен быть актуален, пользователь должен иметь чтение всех трёх собственных товаров.
Для административных уроков нужен единственный пользователь УчебныйПользовательСинтаксиса, право Администрирование, монопольный сеанс без разделителей данных. В этих уроках используется только Версия1; Версия2 требует отдельной подготовки поискового сервера.
Первый запуск административного урока делайте с пустым подтверждением. Не используйте рабочую базу или копию с реальными данными. Обслуживание меняет индекс/настройки и может занимать время, но не должно подменяться удалением товаров.
Процедура ВыполнитьПример() Экспорт
Если НЕ ПолнотекстовыйПоиск.ИндексАктуален() Тогда
ВызватьИсключение "Сначала обновите индекс своей отдельной учебной базы";
КонецЕсли;
Список = ПолнотекстовыйПоиск.СоздатьСписок("учебномаяк", 2);
Область = Новый Массив;
Область.Добавить(Метаданные.Справочники.УчебныеТовары);
Список.ОбластьПоиска = Область;
Список.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать;
Список.ОграничиватьСтрокуПоиска = Истина;
Список.ПолучатьПредставление = Истина;
Список.ПолучатьОписание = Истина;
Список.ПорогНечеткости = 0;
Список.РазмерПорции = 10;
Выражения = Новый Массив;
Выражения.Добавить("учебномаяк И (книга ИЛИ ручка)");
Выражения.Добавить("учебномаяк НЕ коробка");
Для Каждого Выражение Из Выражения Цикл
Если СтрДлина(Выражение) > 1000 Тогда
ВызватьИсключение "Учебное выражение слишком длинное";
КонецЕсли;
Список.СтрокаПоиска = Выражение;
Список.ПерваяЧасть();
Сообщить(Список.ПолноеКоличество() = 2);
Сообщить(Список.Количество() = 2);
Сообщить(НЕ Список.СлишкомМногоРезультатов());
Сообщить("Выражение: " + Выражение);
Для Индекс = 0 По Список.Количество() - 1 Цикл
Сообщить(Список.Получить(Индекс).Представление);
КонецЦикла;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Использовать два фиксированных учебных выражения: Книга или Ручка с маркером; затем маркер без Коробки.
Операторы писать в верхнем регистре, скобки задают группировку. НЕ здесь связывает два условия, не стоит в начале.
Установить размер порции 10, чтобы два результата помещались вместе. После изменения СтрокаПоиска снова выполнить ПерваяЧасть.
Показать фактические представления. Не использовать поисковую строку в Выполнить, SQL или динамическом программном коде.
Как проверить результат
Для обоих выражений ожидаются Книга и Ручка, три проверки каждого выражения Истина.
Если добавить другой товар с тем же маркером, контрольное количество нужно пересмотреть, а не скрывать новые строки.
Ожидаемый результат
Две понятные задачи показывают смысл логических операторов без произвольного внешнего ввода.
На что обратить внимание
ОграничиватьСтрокуПоиска проверяет ограничения платформы: 1000 символов и 32 слова. Одна проверка длины не считает слова.
Морфология и настройки языка влияют на поиск; это не точное сравнение реквизита с текстом.
Нечёткость, синонимы и групповые символы имеют отдельные ограничения. Не включайте их автоматически ради любого совпадения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.