Запросы агрегирования в хранилище данных созданы на основе технологии Elasticsearch (в настоящее время версия 1.7.x). Elasticsearch предоставляет возможность поиска и агрегирования в режиме реального времени с помощью интерфейс приложений API приложений аналитика, формирующего поверх него тонкий слой повышенной безопасности. В примерах использован язык эластичного поиска запросов и агрегирования.
-
Язык, используемый в поле фильтрующего запроса JSON, описан в документации Elasticsearch запроса DSL.
-
Язык, используемый в поле агрегирования запроса JSON, полностью описан в документации Elasticsearch Aggregations.
Индексы
Данные разных типов размещаются в разных индексах. Например, данные заданий включены в индекс JobPart, а данные затрат — в индекс затрат. Необходимые данные можно указать, указав индекс в URL-адресе конечной точки агрегированного интерфейса приложений API.
Родительские документы
Части информации о задании живут в двух разных документах в БД Elasticsearch. Эти документы являются родительскими элементами дочерних элементов. Например, информация о проекте задания живет в документе родительского элемента, а информация о самом задании — в документе дочернего элемента. В зависимости от требуемой информации агрегированные показатели либо перед агрегированием данных между родительский элемент и дочерний элемент, либо после него, однако само агрегирование данных должно присутствовать во всех запросах.
Общие данные
Анализ
{ "Идентификатор": строка, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «innerId»: число, «имя»: строка, «теги»: строка[], «разгромлено»: boolean, «trashedBy»: <Пользователь>, «тип»: строка }
Задание
{ «имя»: строка, «лингвист»: <Пользователь>, «Исполнитель»: <Исполнитель> }
Портал отправителя
{ "Идентификатор": строка, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «имя»: строка, «теги»: строка[], «разгромлено»: boolean, «urlId»: строка }
Покупатель
{ "Идентификатор": строка, «имя»: строка }
Клиент
{ "Идентификатор": строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «externalId»: строка, «имя»: строка, «теги»: строка[], «разгромлено»: boolean, }
CostCenter
{ "Идентификатор": строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «имя»: строка, «теги»: строка[], «разгромлено»: boolean, }
Отрасль
{ "Идентификатор": строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «имя»: строка, «теги»: строка[], «разгромлено»: boolean }
Работа
{ "Идентификатор": строка, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «расширение»: строка, «имя файла»: строка, «Количество групп»: число, «innerId»: "1", «languagePair»: строка, "lastModified": Дата, «localePair»: строка, «Язык исходника»: строка, "sourceLocale": string, «теги»: строка[], "targetLanguage": string, "targetLocale": string", «taskId»: строка, «разгромлено»: boolean, «trashedBy»: <Пользователь>, «uid»: строка }
JobPart
{ "Идентификатор": "19", «назначить»: <Назначение>, «beginIndex»: число, «покупатель»: <Покупатель>, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDue": Дата, «Конечный индекс»: число, «Количество групп»: число, «innerId»: строка, "lastModified": Дата, «Уровень»: число, «статус»: строка, «теги»: [], «uid»: строка, "workflowStep": <WorkflowStep> }
MtEngine
{ "Идентификатор": строка, «удален»: логическое, «по умолчанию_: boolean, «includeTags»: логичный, «имя»: строка, «теги»: строка[], «тип»: строка, }
NetRateScheme
{ "Идентификатор": строка, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDeleted": Дата, «по умолчанию_»: логичный, «удален»: логическое, «externalId»: строка, «имя»: строка, «теги»: строка[], }
Прайс-лист
{ "Идентификатор": строка, «createdBy»: <Пользователь >, «валюта»: строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «по умолчанию_»: логичный, «удален»: логическое, «имя»: строка, «теги»: строка[], «разгромлено»: boolean, «Единица»: строка }
Проект
{ "Идентификатор": строка, «покупатель»: <Покупатель>, «клиент»: <Клиент>, «costCenter»: <CostCenter>, «createdBy»: <Пользователь >, "dateCreated": Дата, "dateDeleted": Дата, "dateDue": Дата, "dateTrashed": Дата, «удален»: логическое, «отрасль»: <Отрасль>, «innerId»: число, "languagePairs": string[], "localePairs": string[], "mtEngine": <MtEngine>, «имя»: строка, «Примечание»: строка, «ответственный»: <Пользователь>, «Язык исходника»: строка, "sourceLocale": string, «статус»: строка, «специализация»: <специализация, «теги»: строка[], "targetLanguages": string[], "targetLocales": string[], «разгромлено»: boolean, «trashedBy»: <Пользователь>, «uid»: строка, «Исполнитель»: <Исполнитель> }
Ценовое предложение
{ "Идентификатор": строка, «createdBy: <пользователь >, «валюта»: строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «innerId»: строка, «имя»: строка, «статус»: строка, «теги»: строка[], «разгромлено»: boolean, «trashedBy»: <Пользователь>, «Единица»: строка }
Услуга
{ "Идентификатор": строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «имя»: строка, «publicName»: строка, «теги»: строка[], «разгромлено»: boolean, «тип»: строка }
Субдомен
{ "Идентификатор": строка, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «имя»: строка, «теги»: строка[], «разгромлено»: boolean }
Пользователь
{ «Идентификатор»: номер, «активный»: логический, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «Электронная почта»: строка, «имя»: строка, «fullName»: строка, «innerId»: число, "jobTitle": string, «фамилия»: строка, «языковой стандарт»: строка, «Примечание»: строка, «Роль»: строка, «теги»: строка[], «Часовой пояс»: строка, «разгромлено»: boolean, «Имя пользователя»: строка }
Исполнитель
{ "Идентификатор": строка, «кандидат»: логический, "dateCreated": Дата, "dateDeleted": Дата, "dateTrashed": Дата, «удален»: логическое, «теги»: строка[], «токен»: строка, «разгромлено»: boolean }
WorkflowStep
{ "Идентификатор": строка, «аббревиатура»: строка, "dateDeleted": Дата, "dateTrashed": Дата, «имя»: строка, «заказ»: номер, «теги»: строка[], «разгромлено»: boolean }
Индекс анализа
Агрегирование данных
«данные»: { «дети»: { "type": "analysisType" } }
Документ родительского элемента
{ «виджет автоматизации проектов»: <виджет автоматизации проектов>, «проект»: <Проект >, «услуга»: <услуга> }
Документ дочернего элемента
{ «анализ»: <Анализ>, «jobPart»: <JobPart>, «задание»: <Задание >, "netRateScheme": <NetRateScheme>, «приоритет»: число, «данные»: { "машинный перевод (МТ)": { "match0": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match100": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match50": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match75": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match85": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match95": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число } }, «повторы»: { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "память переводов (TM)": { "match0": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match100": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match101": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match50": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match75": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match85": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число }, "match95": { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число } }, «Итого»: { «символов»: число, «страниц»: число, «в процентах»: число, «сегменты»: число, «слова»: число } } }
Индекс API
Агрегирование данных
«данные»: { «дети»: { "type": "apiType" } }
Документ родительского элемента
{ «пользователь»: <Пользователь> }
Документ дочернего элемента
{ «запрос»: { «дата»: Дата, «host»: строка, «ipv4»: строка, "ipv6": строка, «местоположение»: строка, «метод»: строка }, «ответ»: { «дата»: Дата, «продолжительность»: число, «статус»: номер }, "интерфейс приложений API": { «действие»: строка, «асинхронно»: boolean, «тип»: строка, «uri»: строка, «ver»: строка } }
Индекс затрат
Агрегирование данных
«данные»: { «дети»: { "type": "costsType" } }
Документ родительского элемента
{ «виджет автоматизации проектов»: <виджет автоматизации проектов>, «проект»: <Проект >, «услуга»: <услуга> }
Документ дочернего элемента
{ «анализ»: <Анализ>, «задание»: <Задание >, «jobPart»: <JobPart>, "netRateScheme": <NetRateScheme>, «прайс-лист»: <прайс-лист>, «Ценовое предложение»: <Ценовое предложение>, "workflowStep": <WorkflowStep>, «приоритет»: число, «данные»: { "машинный перевод (МТ)": { «match0»: число, «match100»: число, «match50»: число, «match75»: число, «match85»: число, «match95»: номер }, «повторы»: число, "память переводов (TM)": { «match0»: число, «match100»: число, «match101»: число, «match50»: число, «match75»: число, «match85»: число, «match95»: номер }, «всего»: число } }
Индекс jobPart
Агрегирование данных
«данные»: { «дети»: { "type": "jobPartType" } }
Документ родительского элемента
{ «виджет автоматизации проектов»: <виджет автоматизации проектов>, «проект»: <Проект >, «услуга»: <услуга> }
Документ дочернего элемента
{ «задание»: <Задание >, «jobPart»: <JobPart> «данные»: { «подразделения»: { «символы»: { «всего»: число, «подтверждено»: число, «не подтвержден»: число, «заблокировано»: число, «не заблокирован»: число, "confirmedAndLocked": number, "notConfirmedAndLocked": number, «завершено»: число, «не завершено»: число }, «группы»: { «всего»: число }, «сегменты»: { «всего»: число, «подтверждено»: число, «не подтвержден»: число, «заблокировано»: число, «не заблокирован»: число, "confirmedAndLocked": number, "notConfirmedAndLocked": number, «завершено»: число, «не завершено»: число, "машинный перевод (МТ)": { «postEdited»: число, «актуально»: число, «Неактуально»: номер }, "контроль качества (QA)": { «проверено»: число, «не проверено»: число } }, «слова»: { «всего»: число, «подтверждено»: число, «не подтвержден»: число, «заблокировано»: число, «не заблокирован»: число, "confirmedAndLocked": number, "notConfirmedAndLocked": number, «завершено»: число, «не завершено»: число }, "контроль качества (QA)": { «предупреждения»: число, «проигнорированные предупреждения»: число, «notIgnoredWarnings»: число } } }
-
Запросы HTTP выполняются в Postman.
-
Войдите через менеджера проекта (PM) или профиль администратора и получите токен, используя интерфейс приложений API.
-
ЗАПРОСЫ В ИНТЕРФЕЙС ПРИЛОЖЕНИЙ
API/v3/analytics/jobPart?token=<your_login_token>
Общее количество заданий
Запрос
{ «агрегирования»: { «данные»: { «дети»: { "type": "jobPartType" } } } }
Ответ
{ «хиты»: { «Итого»: 359 }, «агрегирования»: { «данные»: { "doc_count": 14417 } } }
В поле «Агрегированные данные» в ответ на агрегирование данных было получено 14 417 совпадающих документов, отображаемых в поле doc_count.
Общее количество исходных слов
Запрос
{ «агрегирования»: { «данные»: { «дети»: { "type": "jobPartType" }, «aggs»: { "Количество слов": { "сумма": { "field": "data.volume.words" } } } } } }
Ответ
{ «хиты»: { «Итого»: 359 }, «агрегирования»: { «данные»: { "doc_count": 14417, "Количество слов": { «Значение»: 6893067 } } } }
Общее количество слов оригинала, поделенных на язык перевода
Запрос
{ «агрегирования»: { «данные»: { «дети»: { "type": "jobPartType" }, «aggs»: { "byTargetLanguage": { «Термины»: { "field": "job.targetLanguage", «Размер»: 3 }, «aggs»: { "Количество слов": { "сумма": { "field": "data.volume.words" } } } } } } } }
Ответ
{ «хиты»: { «Итого»: 359 }, «агрегирования»: { «данные»: { "byTargetLanguage": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 10071, «ковши»: [ { "doc_count": 1835, "Количество слов": { «Значение»: 702721 }, «ключ»: «cs» }, { "doc_count": 1491, "Количество слов": { «Значение»: 2602529 }, «ключ»: «de» }, { "doc_count": 1020, "Количество слов": { «Значение»: 92676 }, «ключ»: «фи» } ] }, "doc_count": 14417 } } }
Структура «Бакены» отображается в ответе. Когда модулю Analytics предлагается разделить данные по некоторой категории, результат представляется в виде списка контейнеров. Каждое ведро содержит ключ, определяющий, какие данные представляет это ведро (в данном случае язык перевода), и значение (другие агрегирования), специфичные как раз для этой части набора данных.
Общее количество работ, деленное на статус проекта
Запрос
{ «агрегирования»: { "projectStatus": { «Термины»: { "field": "project.status" }, «aggs»: { «данные»: { «дети»: { "type": "jobPartType" } } } } } }
Ответ
{ «хиты»: { «Итого»: 359 }, «агрегирования»: { "projectStatus": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, «ковши»: [ { "doc_count": 326, «данные»: { "doc_count": 14318 }, «ключ»: «НОВЫЙ» }, { "doc_count": 31, «данные»: { "doc_count": 89 }, «ключ»: «ЗАВЕРШЕНО» }, { "doc_count": 1, «данные»: { "doc_count": 4 }, «ключ»: «НАЗНАЧЕНО» }, { "doc_count": 1, «данные»: { "doc_count": 6 }, «ключ»: "DECLINED_BY_VENDOR" } ] } } }
Модулю аналитики было предписано разделить данные по статусу проекта до агрегирования данных.
Общее количество работ из новых проектов
Запрос
{ «фильтровать»: { «термин»: { «проект»: «НОВЫЙ» } }, «агрегирования»: { «данные»: { «дети»: { "type": "jobPartType" } } } }
Ответ
{ «хиты»: { «Итого»: 326 }, «агрегирования»: { «данные»: { "doc_count": 14318 } } }
В запросе используется фильтрующее поле. Это сужает данные перед следующими агрегированием.