Бизнес-смысл
Расширенный поиск — это возможность искать контрагентов, не ограничиваясь стандартными рамками, строить гибкие отчеты и составлять различные комбинации условий.
В системе обнаружилось 100 человек со словом «Гагарина»? А сколько тех, у кого это фамилия? Или наоборот, улица в адресе?
Простой поиск ищет по всем полям, расширенный — по конкретному. Поиск ищет только по полному совпадению (по частичному — нет). При пустом вводе поиск вернёт полный список базы данных.
Пояснялка для студентов
Расширенный поиск нужен для работы через API. Системы, которые интегрируются с Folks, работают только с методом search, который фактически является строкой поиска. Делать 100500 разных методов и учить интеграцию "а вот по 5 полям можно использовать метод фильтрации, а по остальным 50 расширенный поиск" смысла нет. Поэтому через интеграцию ищут простым или расширенным поиском, все. Или "поищи везде", или "по конкретным полям".
Но пользователь через поисковую строку может также ввести запрос в виде расширенного поиска и получить результат. Потому что для фильтрации доступно 5 колонок, а в реальных системах их будет 50 в каждой таблице. Поиск по каждой делать смысла нет из-за ложно-положительных срабатываний. Поэтому используется расширенный
Описание
Расширенный поисковый запрос всегда должен начинаться с вопросительного знака:
? Folk.name = Иван
Чтобы увидеть результаты расширенного поиска, необходимо нажать Ctrl+Enter
(в отличие от Enter
для обычного поиска).
Поиск возможен по следующим полям и атрибутам:
Синтаксис
Равенство
Чтобы обозначить равенство, можно использовать символ =
.
Контрагенты с фамилией Иванов:
? Folk.surname = Иванов
Контрагенты, родившиеся 18.03.1975:
? Folk.birthdate = 18.03.1975
Пробел интерпретируется как разделитель, составные значения нужно передавать в кавычках:
? Folk.patronymic = "Бахтырай Оглы"
Неточный поиск
В расширенном поиске можно искать по части слова, используя символ *, который означает "любое количество любых символов"
Контрагенты с фамилией Иванов:
? Folk.surname = Ива*
Контрагенты с датой рождения, содержащей цифры 03
? Folk.birthdate = *03*
Пробел экранируем через слеш
? Folk.company = *часовой\ пояс*\ Омск*
Если нужно искать именно кавычки, их тоже экранируем
? Folk.company = *\"Яблочко*\" ? Folk.company = *Студия\ \"Яблочко\"* --- экранируем сначала пробел, потом кавычку
Примеры правил поиска с пробелами и кавычками:
- Поискать ЮЛ с пробелами в названии: [? Folk.company = *\ *] - Поискать ЮЛ с двумя пробелами в названии [? Folk.company = *\ *\ *] - Поискать ЮЛ, у которого есть часть в кавычках, а внутри неё пробел [? Folk.company = *\"*\ *\"*] (первая и последняя звёздочки для "любое начало и конец"; кавычки экранированы, т.к. спец.символ; между кавычками стоит "что угодно, пробел, что угодно")
Просто написать
? Folk.company = *часовой пояс Омск*
Нельзя → пробел означает, что поиск по данной сущности закончен и дальше или новый запрос, или простой поиск, не расширенный. То есть мы получили три условия поиска:
- ? Folk.company = *часовой
- Пояс
- Омск*
Из них «*часовой» относится к наименованию, а остальное — к любым индексируемым полям.
Если брать в кавычки, не будет работать символ *
Комбинация условий
Чтобы выполнялись несколько условий поиска одновременно, необходимо использовать выражение AND
(И)
.
Например, Ивановых, родившихся 18.03.1975, можно найти таким запросом:
? Folk.surname = Иванов and Folk.birthdate = 18.03.1975
Чтобы выполнялось хотя бы одно условие поиска, необходимо использовать использовать выражение OR
(ИЛИ)
.
Например, поиск контрагентов с фамилией Иванов или Кутузов:
? Folk.surname = Иванов or Folk.surname = Кутузов
Можно использовать и простой поиск, и расширенный → если не экранировать пробел символом «\», то пробел в расширенном поиске означает, что дальше мы ищем полнотекстово.
Поэтому можно совместить — сначала все условия по атрибутам, потом пробел и ФИО одной строкой
? Phone.aggregateNumber = 4953332243 Иванов Иван Иванович
Перечисления
Поиск по вхождению значения в множество значений (перечисление) выполняется с помощью выражения OR
(ИЛИ
).
Например, для поиска всех контрагентов с указанными идентификаторами:
? Folk.id = (1024 or 1025 or 1026 or 2048)
Неравенства и диапазоны
Для числовых полей и дат можно делать выборки по условиям на неравенство:
- >
- >=
- <
- <=
Например, для поиска всех контрагентов старше 20 лет:
? Folk.birthdate > 01.01.1993
Если дата может включать время, то для поиска по конкретному дню необходимо использовать диапазон дат. Например, чтобы найти контрагентов с датой рождения 15.01.2013:
? Folk.birthdate >= 15.01.2013 and Folk.birthdate < 16.01.2013
Условие на диапазон также можно указать с помощью интервала:
? Folk.birthdate : [18.03.1975, 18.03.1995]
Квадратные скобки []
указывают, что поиск включает границы интервала, фигурные скобки {}
— что не включает.