Поиск ресурсов

Обзор

API-интерфейс Frame.io поддерживает глубокий фасетный поиск ресурсов по всей учетной записи, дублируя функциональность в веб-приложении. Хотя наиболее полезные фильтры — это команда, проект и статус, фильтры и сортировку можно комбинировать уникальными способами для создания очень конкретных наборов, управляемых API-интерфейсами. В целом все фильтры, кроме account_id, q (запрос) и sort, имеют одинаковую структуру и все объясняются ниже. search-filters.png

Несоответствие между запрошенным и возвращенным размерами страницы

По состоянию на март 2022 года известна ошибка, влияющая на функцию постраничного вывода API-интерфейса поиска. Пока эта ошибка не устранена, мы не рекомендуем использовать поисковой API-интерфейс для перебора нескольких страниц результатов (т. е. более 100 ресурсов), поскольку запрошенный размер страницы может не соответствовать фактическому количеству возвращенных ресурсов.

Значения по умолчанию

Запрос API-интерфейса для запуска поиска всегда одинаковый:

это всегда один и тот же запрос

POST по адресу https://api.frame.io/v2/search/library

Если не указано явно, значения по умолчанию для настройки поиска следующие:

АтрибутЗначение по умолчаниюОписание
page_size10На странице будет возвращаться 10 ресурсов.
page1Запрос вернет первую страницу ответа.
sortrelevance«Relevance» пытается упорядочить ресурсы на основе специально настроенного набора атрибутов. При отсутствии запроса релевантность сильно смещена в сторону недавних операций добавления.

Об этом руководстве

В этом руководстве представлен процесс создания поискового запроса, который соответствует следующим критериям:

  • ресурсы в учетной записи;
  • соответствует запросу "moon";
  • находится в конкретном проекте;
  • добавление с 1 по 30 апреля 2020 года;
  • наличие статуса «Утверждено».

Основная часть нашего поиска будет выглядеть следующим образом:

1{
2 "account_id": "<account_id>",
3 "q": "moon",
4 "sort": "name",
5 "filter": {
6 "inserted_at": [
7 {
8 "op": "gte",
9 "value": "2020-04-01T04:00:00.000Z"
10 },
11 {
12 "op": "lte",
13 "value": "2020-04-30T03:59:59.999Z"
14 }
15 ],
16 "project_id": {
17 "op": "eq",
18 "value": "<project_id>"
19 },
20 "label": {
21 "op": "eq",
22 "value": "approved"
23 }
24 },
25 "page_size": 10,
26 "page": 1
27}

Учетная запись, запрос и сортировка.

Учетная запись (account_id), запрос (q) и sort — это три основных элемента, которые находятся вне атрибутов filter в поисковом запросе.

Контекст учетной записи

Технически единственный атрибут, необходимый для выполнения поиска, — account_id. Это приведет к выгрузке всех ресурсов (включая папки) в учетной записи с использованием параметров разбивки на страницы по умолчанию (10 ресурсов на страницу, начиная со страницы 1).

1{
2 "account_id": "<account_id>"
3}

Поисковый запрос

Следующим наиболее распространенным (и полезным) атрибутом является сам запрос. Примечание. Поскольку поисковой API-интерфейс Frame.io принимает нулевой запрос, подстановочный знак (*) не требуется. Вы либо ищете что-то конкретное, либо запрашиваете (возможно, отфильтрованную) сортировку всех ресурсов в учетной записи.

В нашем случае мы будем искать слово «луна».

1{
2 "account_id": "<account_id>",
3 "q": "moon"
4}

Сортировка

sort.png

Frame.io поддерживает множество различных параметров сортировки. Синтаксис порядка сортировки одинаков для всех параметров:

  • Есть направление сортировки по умолчанию.
  • Чтобы изменить это направление на противоположное, добавьте перед значением сортировки знак минус -.

Например, для сортировки в обратном алфавитном порядке (от Я до А) нужно сообщить &quot;sort&quot;: &quot;-name&quot;. Операция сортировки по умолчанию — «Relevance». Соответственно, ее не нужно сообщать, и она будет применена, если атрибут sort не указан.

Параметр сортировкиАтрибутНаправление по умолчанию
Релевантностьн/дн/д
Дата добавленияinserted_atСначала старые
Имяnameот А до Я
РазмерfilesizeОт меньшего к большему
Добавляющий пользовательcreator.nameот А до Я
Соответственно, по мере создания запроса мы теперь можем добавить сортировку по имени от А до Я:
1{
2 "account_id": "<account_id>",
3 "q": "moon",
4 "sort": "name"
5}

Фильтры и разбивка на страницы

Фильтры — это самая сложная и в то же время самая эффективная функция поиска ресурсов Frame.io. Фильтры записываются в одном объекте filter и следуют одной схеме с операцией (op) и значением. Фильтры будут использовать следующие общие сокращения, при этом варианты эквивалентности, отличные от «equals», зарезервированы для запросов даты и размера:

  • eq — равно
  • lt — менее чем
  • gt — более чем
  • lte — менее чем или равно
  • gte — более чем или равно
  • match — точное соответствие, используемое только для фильтров «Добавляющий пользователь» и «Тип файла»

Например, фильтр для сопоставления с известным project_id будет создан следующим образом:

1{
2 "filter": {
3 "project_id": {
4 "op": "eq",
5 "value": "<project_id>"
6 }
7 }
8}

Параметры и операции

В следующей таблице описаны параметры и операции, связанные с каждым типом фильтра.

Параметр фильтраАтрибутПоддерживаемые операцииПоддерживаемые значения
Архивированоarchivedeqtrue, false
Дата добавленияinserted_ateq, lt, gt, lte, gte&lt;datetime&gt; (ISO-8601, UTC)
Удаленоdeletedeqtrue, false
Тип файлаfiletypematch<mime type=""></mime>
Частныйprivateeqtrue, false
Проектproject_ideq&lt;project_id&gt;
Размерfilesizeeq, lt, gt, lte, gteразмер (в байтах)
Статусlabeleqnone, in_progress, needs_review, approved
Командаteam_ideq&lt;team_id&gt;
Типasset_typeeqаудио, документ, папка, изображение, другое, поток, видео
Добавляющий пользовательcreator.namematch&lt;name&gt;
Добавляющий пользователь должен быть активным участником учетной записи для заполнения индекса

Поиск создателей, которые больше не являются участниками учетной записи, работать не будет, поскольку этот пользователь больше не находится в индексе поиска пользователей.

Чтобы продолжить создание запроса, теперь можно добавить фильтр для ресурсов, которые:

  • находится в конкретном проекте;
  • добавлены с 1 по 30 апреля 2020 года;
  • помечены как «Утверждено».
1{
2 "account_id": "<account_id>",
3 "q": "moon",
4 "sort": "name",
5 "filter": {
6 "inserted_at": [
7 {
8 "op": "gte",
9 "value": "2020-04-01T04:00:00.000Z"
10 },
11 {
12 "op": "lte",
13 "value": "2020-04-28T03:59:59.999Z"
14 }
15 ],
16 "project_id": {
17 "op": "eq",
18 "value": "<project_id>"
19 },
20 "label": {
21 "op": "eq",
22 "value": "approved"
23 }
24 }
25}
Разбивка на страницы

Конечная точка поиска разбивает на страницы точно так же, как и любая другая конечная точка, через атрибуты page_size и page, которые находятся на внешнем слое тела запроса. Подробнее о разбивке на страницы см. в отдельном руководстве здесь.