Задача [API85]: API метод поиска данных по форме и записям реестра, получения записей реестра

Формулировка проблемы: при поиске большого количества данных по форме или записей реестра метод rest/api/asforms/search работает достаточно медленно.

Решение: необходимо реализовать новый метод, который использует индекс. Для индекса должна быть создана отдельная папка в индексах.

URL метода: rest/api/asforms/search_index

Тип запроса: GET.

Метод принимает следующие входные параметры:

Метод возвращает следующие выходные параметры:

При формировании запроса все условия параметров поиска соединяются с помощью оператора OR.

Например. В параметры поиска было передано:

  • два идентификатора формы (formUUID1, formUUID2),

  • два названия поля (field1,field2),

  • две поисковые строки (search1, search2)

  • тип сравнения partial.

Тогда в результатах поиска будут все записи по формам formUUID1 и formUUID2, у которых (field1 содержит search1 ИЛИ field2 содержит search1 ИЛИ field1 содержит search2 ИЛИ field2 содержит search2).

Если не передать параметр field, то метод вернет все данные данной формы.

Несколько наборов параметров поиска

Если необходимо наложить разные условия на разные поля формы, то можно передать параметры поиска дополнительно, прибавив к названиям параметров порядковый номер набора параметров. Количество наборов параметров, которые можно добавить неограничено. Главное соблюдать правильную нумерацию названий параметров: 1, 2, 3 и т.д. (первый набор может не иметь порядкового номера). Таким образом, метод должен получить дополнительный набор параметров formUUID1, search1, field1, type1, formUUID2, search2, field2, type2 и т.д. По-умолчанию условия различных наборов соединяются между собой оператором ИЛИ, чтобы это изменить, необходимо передать параметр term, который может принимать значения:

Пример запроса поиска всех записей реестра по форме с идентификатором uuid, для которых field1 равно str1 и field2 содержит str2:

rest/api/asforms/search_index?formUUID=uuid&search=str1&field=field1&type=exact&formUUID1=uuid&search1=str2&field1=field2&type1=partial&term=and

Пример возвращаемого объекта:


{
    count : 1000, 
    data : 
         [
            {"dataUUID": "uuid1", "documentID": "docID1"}, 
            {"dataUUID": "uuid2", "documentID": "docID2"}, 
            {"dataUUID": "uuid3", "documentID": "docID3"}
            ] 
}