Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 2.48 KB

File metadata and controls

34 lines (25 loc) · 2.48 KB

Draft

search[prop1..prop2] = value {#search-path-recursive}

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

// Поиск по friends.surname, friends.friends.surname и так далее
GET /users?search[friends...surname]=Petrov 

Сервер понимает, что свойство friends относится к выбираемым объектам - пользователям. Так как далее следуют две точки, то выполняется поиск пользователей по surname="Petrov". Далее выполнется условие по графу - отношение friends должно связываться через неопределенноё количество связей (ребер) до любого из найденных пользователей по surname.

В примере ниже указываем условие на отношение club, которое имеет рекурсивное свойство parent. Ghb сверяется name у клуба и рекурсивно у его родителей. Запись свойства с вопросом parent? означает, что его в пути на свойство может не быть.

// Поиск по player.club.name, player.club.parent.name, player.club.parent.parent.name
GET /players?search[club.parent?..name]=ЦСКА

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