4.5.16. Поиск сущностей с фильтром
REST API даёт возможность искать экземпляры сущностей по определенным условиям.
Примеры мы рассмотрим на модели данных, состоящей из двух сущностей:
-  
Author с двумя полями:
lastNameиfirstName -  
Book с тремя полями:
title(String),author(Author) иpublicationYear(Integer) 
Чтобы выполнить поиск с фильтром URL должен выглядеть следующим образом:
http://localhost:8080/app/rest/v2/entities/test$Book/search
Условия поиска должны быть переданы в параметре filter. filter - это JSON объект, который содержит набор условий поиска. Если поиск выполняется с помощью GET запроса, то параметр filter передается в URL.
- Пример 1
 -  
    
Необходимо найти все книги, опубликованные в 2007 году с именем автора, начинающимся с "Alex". JSON фильтр для подобного условия будет выглядеть так:
 
{
    "conditions": [
        {
            "property": "author.firstName",
            "operator": "startsWith",
            "value": "Alex"
        },
        {
            "property": "publicationDate",
            "operator": "=",
            "value": 2007
        }
    ]
} 
  По умолчанию все критерии поиска применяются с условием И.
Данный пример также демонстрирует возможность использования вложенных свойств объекта (author.firstName).
- Пример 2
 -  
    
Следующий пример показывает две вещи: как выполнять поиск с помощью POST запроса и как использовать группы ИЛИ. В случае POST все параметры должны быть переданы в JSON объекте в теле запроса. Условия поиска должны быть помещены в поле объекта с именем
filter. Остальные параметры (имя view, количество выгружаемых сущностей и т.п.) должны быть помещены в поля объекта с соответствующими именами: 
{
  "filter": {
    "conditions": [
      {
        "group": "OR",
        "conditions": [
          {
            "property": "author.lastName",
            "operator": "contains",
            "value": "Stev"
          },
          {
            "property": "author.lastName",
            "operator": "=",
            "value": "Dumas"
          }
        ]
      },
      {
        "property": "publicationDate",
        "operator": "=",
        "in": [2007, 2008]
      }
    ]
  },
  "view": "book-view"
} 
  В этом примере коллекция conditions содержит не только объекты с критериями поиска, но и группу ИЛИ (OR). Итоговое условие можно представить так:
((author.lastName contains Stev) OR (author.lastName = Duma) AND (publicationDate in [2007, 2008]))
Обратите внимание, что параметр view также передан в теле запроса.