Хранилище данных, выполняющее агрегатные запросы, построено на базе Elasticsearch (в настоящее время версия 1.7.x). Elasticsearch предоставляет возможности для поиска в реальном времени и агрегирования, при этом API аналитики формирует тонкий, улучшенный с точки зрения безопасности слой поверх него. Язык запросов и агрегирования Elasticsearch используется в примерах.
-
Язык, используемый в поле filter JSON-запроса, описан в документации Elasticsearch Query DSL.
-
Язык, используемый в поле aggregations JSON-запроса, полностью описан в документации Elasticsearch Aggregations.
Индексы
Разные типы данных находятся в разных индексах. Например, данные job находятся в индексе jobPart, а данные costs находятся в индексе costs. Необходимые данные могут быть указаны путем указания индекса в URL-адресе конечной точки API агрегирования.
Документы родитель-дочерний
Части информации о задании находятся в двух разных документах в базе данных Elasticsearch. Эти документы находятся в parent-child отношении. Например, информация о проекте задания находится в родительском документе, в то время как информация о самом задании находится в дочернем документе. В зависимости от необходимой информации агрегирования могут быть либо до агрегирования данных родитель-дочернего, либо после него, но само агрегирование данных должно присутствовать во всех запросах.
Общие данные
Анализ
{
"id": строка,
"createdBy": <Пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"innerId": число,
"name": строка,
"tags": строка[],
"trashed": логическое,
"trashedBy": <пользователь>,
"type": строка
}
Назначение
{
"name": строка,
"linguist": <пользователь>,
"vendor": <Vendor>
}
Портал отправителя
{
"id": строка,
"createdBy": <Пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"name": строка,
"tags": строка[],
"trashed": логическое,
"urlId": строка
}
Покупатель
{
"id": строка,
"name": строка
}
Клиент
{
"id": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"externalId": строка,
"name": строка,
"tags": строка[],
"trashed": логическое,
}
Центр затрат
{
"id": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"name": строка,
"tags": строка[],
"trashed": логическое,
}
Отрасль
{
"id": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"name": строка,
"tags": строка[],
"удалено": булево
}
Задание
{
"id": строка,
"createdBy": <Пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"расширение": строка,
"fileName": string,
"количество групп": число,
"innerId": "1",
"языковая пара": строка,
"lastModified": Date,
"локализация пары": строка,
"sourceLanguage": string,
"локализация источника": строка,
"tags": строка[],
"targetLanguage": string,
"targetLocale": string",
"идентификатор задачи": строка,
"trashed": логическое,
"trashedBy": <пользователь>,
"идентификатор пользователя": строка
}
Часть задания
{
"ид": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <Пользователь>,
"dateCreated": Date,
"срок исполнения": Дата,
"конечный индекс": число,
"количество групп": число,
"внутренний идентификатор": строка,
"lastModified": Date,
"уровень": число,
"статус": строка,
"tags": [],
"uid": строка,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": строка,
"deleted": логическое,
"по умолчанию": логическое,
"включитьТеги": логическое,
"name": строка,
"tags": строка[],
"тип": строка,
}
NetRateScheme
{
"id": строка,
"createdBy": <Пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"по умолчанию_": логическое,
"deleted": логическое,
"externalId": строка,
"name": строка,
"tags": строка[],
}
PriceList
{
"id": строка,
"createdBy": <Пользователь>,
"валюта": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"по умолчанию_": логическое,
"deleted": логическое,
"name": строка,
"tags": строка[],
"trashed": логическое,
"единица": строка
}
Проект
{
"id": строка,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <Пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"срок исполнения": Дата,
"dateTrashed": Дата,
"deleted": логическое,
"отрасль": <Domain>,
"innerId": число,
"языковыеПары": строка[],
"локальныеПары": строка[],
"mtEngine": <MtEngine>,
"name": строка,
"заметка": строка,
"ответственный": <User>,
"sourceLanguage": string,
"локализация источника": строка,
"статус": строка,
"специализация": <SubDomain>,
"tags": строка[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": логическое,
"trashedBy": <пользователь>,
"uid": строка,
"vendor": <Vendor>
}
Цитата
{
"id": строка,
"созданоПользователем: <пользователь>,
"валюта": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"внутренний идентификатор": строка,
"name": строка,
"статус": строка,
"tags": строка[],
"trashed": логическое,
"trashedBy": <пользователь>,
"единица": строка
}
Услуга
{
"id": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"name": строка,
"публичноеИмя": строка,
"tags": строка[],
"trashed": логическое,
"type": строка
}
Специализация
{
"id": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"name": строка,
"tags": строка[],
"удалено": булево
}
Пользователь
{
"ид": число,
"активный": логическое,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"электроннаяПочта": строка,
"имя": строка,
"полноеИмя": строка,
"innerId": число,
"должность": строка,
"фамилия": строка,
"языковойСтандарт": строка,
"заметка": строка,
"роль": строка,
"tags": строка[],
"timeZone": string,
"trashed": логическое,
"имяПользователя": строка
}
Исполнитель
{
"id": строка,
"кандидат": логическое,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Дата,
"deleted": логическое,
"tags": строка[],
"токен": строка,
"удалено": булево
}
WorkflowStep
{
"id": строка,
"сокращение": строка,
"dateDeleted": Date,
"dateTrashed": Дата,
"name": строка,
"заказ": число,
"tags": строка[],
"удалено": булево
}
ИндексАнализа
АгрегацияДанных
"данные": {
"дочерние": {
"тип": "типАнализа"
}
}
РодительскийДокумент
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"услуга": <Service>
}
ДочернийДокумент
{
"анализ": <Analysis>,
"jobPart": <JobPart>,
"задание": <Job>,
"netRateScheme": <NetRateScheme>,
"приоритет": число,
"данные": {
"машинный перевод": {
"совпадение0": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match100": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match50": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match75": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match85": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match95": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
}
},
"repetitions": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"tm": {
"совпадение0": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match100": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match101": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match50": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match75": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match85": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
},
"match95": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
}
},
"total": {
"символы": число,
"pages": число,
"percent": число,
"segments": число,
"words": число
}
}
}
Индекс API
АгрегацияДанных
"данные": {
"дочерние": {
"type": "apiType"
}
}
РодительскийДокумент
{
"user": <пользователь>
}
ДочернийДокумент
{
"request": {
"date": Дата,
"host": строка,
"ipv4": строка,
"ipv6": строка,
"location": строка,
"method": строка
},
"response": {
"date": Дата,
"duration": число,
"status": число
},
"api": {
"action": строка,
"asynch": булево,
"тип": строка,
"uri": строка,
"ver": строка
}
}
Индекс затрат
АгрегацияДанных
"данные": {
"дочерние": {
"type": "costsType"
}
}
РодительскийДокумент
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"услуга": <Service>
}
ДочернийДокумент
{
"анализ": <Analysis>,
"задание": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <расчет стоимости>,
"workflowStep": <ШагРабочегоПроцесса>,
"приоритет": число,
"данные": {
"машинный перевод": {
"match0": число,
"match100": число,
"match50": число,
"match75": число,
"match85": число,
"match95": число
},
"repetitions": число,
"tm": {
"match0": число,
"match100": число,
"match101": число,
"match50": число,
"match75": число,
"match85": число,
"match95": число
},
"total": число
}
}
часть задания
Агрегация данных
"данные": {
"дочерние": {
"type": "jobPartType"
}
}
Родительский документ
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"услуга": <Service>
}
Дочерний документ
{
"задание": <Job>,
"частьЗадания": <JobPart>
"данные": {
"счета": {
"символы": {
"итого": число,
"подтверждено": число,
"notConfirmed": number,
"заблокировано": число,
"неЗаблокировано": число,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"завершено": число,
"неЗавершено": число
},
"группы": {
"всего": число
},
"сегменты": {
"итого": число,
"подтверждено": число,
"notConfirmed": number,
"заблокировано": число,
"неЗаблокировано": число,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"завершено": число,
"неЗавершено": число,
"мт": {
"послеРедактирования": число,
"релевантно": число,
"неРелевантно": число
},
"кa": {
"проверено": число,
"неПроверено": число
}
},
"слова": {
"итого": число,
"подтверждено": число,
"notConfirmed": number,
"заблокировано": число,
"неЗаблокировано": число,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"завершено": число,
"неЗавершено": число
},
"кa": {
"предупреждения": число,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP-запросы выполняются в Postman.
-
Войдите через профиль менеджера проекта или администратора и получите токен для входа, используя интерфейс приложений API.
-
POST-запросы к
api/v3/analytics/jobPart?token=<ваш_токен_входа>
Общее количество заданий
Запрос
{
"агрегации": {
"данные": {
"дочерние": {
"type": "jobPartType"
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"агрегации": {
"данные": {
"doc_count": 14417
}
}
}
В поле агрегации агрегация данные ответила 14 417 совпадающими документами, показанными в поле doc_count.
Общее количество исходных слов
Запрос
{
"агрегации": {
"данные": {
"дочерние": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"агрегации": {
"данные": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Общее количество исходных слов, деленное на целевой язык
Запрос
{
"агрегации": {
"данные": {
"дочерние": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"агрегации": {
"данные": {
"byTargetLanguage": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 10071,
"buckets": [
{
"doc_count": 1835,
"wordCount": {
"value": 702721
},
"key": "cs"
},
{
"doc_count": 1491,
"wordCount": {
"value": 2602529
},
"key": "de"
},
{
"doc_count": 1020,
"wordCount": {
"value": 92676
},
"key": "fi"
}
]
},
"doc_count": 14417
}
}
}
Сущность buckets отображается в ответе. Когда модуль аналитики запрашивается для разделения данных по какой-либо категории, результат представляется в виде списка бакетов. Каждый бакет содержит ключ, который определяет, какие данные представляет этот бакет (в данном случае целевой язык), и значение (другие агрегации), специфичные только для этой части набора данных.
Общее количество работ, разделенное по статусу проекта
Запрос
{
"агрегации": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"данные": {
"дочерние": {
"type": "jobPartType"
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"агрегации": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"doc_count": 326,
"данные": {
"doc_count": 14318
},
"key": "NEW"
},
{
"doc_count": 31,
"данные": {
"doc_count": 89
},
"ключ": "ЗАВЕРШЕНО"
},
{
"количество_документов": 1,
"данные": {
"doc_count": 4
},
"ключ": "ПРИСВОЕНО"
},
{
"количество_документов": 1,
"данные": {
"doc_count": 6
},
"ключ": "ОТКЛОНЕНО_ИСПОЛНИТЕЛЕМ"
}
]
}
}
}
Модуль аналитики был настроен на разделение данных по статусу проекта перед агрегацией данные .
Общее количество заданий из новых проектов
Запрос
{
"filter": {
"термин": {
"проект.статус": "НОВЫЙ"
}
},
"агрегации": {
"данные": {
"дочерние": {
"type": "jobPartType"
}
}
}
}
Ответ
{
"hits": {
"всего": 326
},
"агрегации": {
"данные": {
"doc_count": 14318
}
}
}
Поле фильтр используется в запросе. Это сужает данные перед последующими агрегациями.