Хранилище данных, выполняющее запрос на агрегацию, построено на основе Elasticsearch (в настоящее время версии 1.7.x). Elasticsearch обеспечивает поиск в реальном времени и возможности агрегации, при этом интерфейс приложений API аналитика формирует тонкий, защищенный уровень поверх него. В примерах используется язык запрос и агрегации Elasticsearch.
-
Язык, используемый в поле фильтровать в JSON запрос, описан в документации Elasticsearch Query DSL.
-
Язык, используемый в поле aggregations в JSON запрос, полностью описан в документации Elasticsearch Aggregations.
Индексы
Разные типы данных находятся в разных индексах. Например, данные задание находятся в индексе jobPart, а данные costs находятся в индексе costs. Необходимые данные можно указать, задав индекс в URL-адресе конечной точки интерфейс приложений API для агрегации.
Родительский элемент-дочерний элемент Документы
Части информации о задание находятся в двух разных документах в базе данных Elasticsearch. Эти документы находятся в отношениях родительский элемент-дочерний элемент. Например, информация о проект задание находится в родительский элемент документе, в то время как информация о самом задание находится в дочерний элемент документе. В зависимости от требуемой информации агрегации выполняются либо до агрегации родительский элемент-дочерний элемент данных, либо после нее, но сама агрегация данных должна присутствовать во всех запрос.
Общие данные
Анализ
{
"Идентификатор": строка,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": строка,
"tags": строка[],
"trashed": boolean,
"trashedBy": <пользователь>,
"type": строка
}
Назначение
{
"name": строка,
"linguist": <пользователь>,
"vendor": <Vendor>
}
портал отправителя
{
"Идентификатор": строка,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": строка,
"tags": строка[],
"trashed": boolean,
"urlId": строка
}
Покупатель
{
"Идентификатор": строка,
"name": строка
}
клиент
{
"Идентификатор": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": строка,
"name": строка,
"tags": строка[],
"trashed": boolean,
}
CostCenter
{
"Идентификатор": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": строка,
"tags": строка[],
"trashed": boolean,
}
Отрасль
{
"Идентификатор": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": строка,
"tags": строка[],
"trashed": boolean
}
Задание
{
"Идентификатор": строка,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": строка,
"fileName": string,
"groupCount": number,
"innerId": "1",
"languagePair": строка,
"lastModified": Date,
"localePair": строка,
"sourceLanguage": string,
"sourceLocale": строка,
"tags": строка[],
"targetLanguage": string,
"targetLocale": string",
"taskId": строка,
"trashed": boolean,
"trashedBy": <пользователь>,
"uid": строка
}
Часть задания
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDue": Date,
"endIndex": number,
"groupCount": number,
"innerId": строка,
"lastModified": Date,
"level": number,
"status": строка,
"tags": [],
"uid": строка,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"Идентификатор": строка,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": строка,
"tags": строка[],
"type": строка,
}
NetRateScheme
{
"Идентификатор": строка,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": строка,
"name": строка,
"tags": строка[],
}
PriceList
{
"Идентификатор": строка,
"createdBy": <пользователь>,
"currency": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": строка,
"tags": строка[],
"trashed": boolean,
"unit": строка
}
Проект
{
"Идентификатор": строка,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <пользователь>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dateTrashed": Date,
"deleted": boolean,
"domain": <отрасль>,
"innerId": number,
"languagePairs": строка[],
"localePairs": строка[],
"mtEngine": <MtEngine>,
"name": строка,
"note": строка,
"owner": <пользователь>,
"sourceLanguage": string,
"sourceLocale": строка,
"status": строка,
"subDomain": <специализация>,
"tags": строка[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": boolean,
"trashedBy": <пользователь>,
"uid": строка,
"vendor": <Vendor>
}
расчет стоимости
{
"Идентификатор": строка,
"createdBy: <пользователь>,
"currency": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": строка,
"name": строка,
"status": строка,
"tags": строка[],
"trashed": boolean,
"trashedBy": <пользователь>,
"unit": строка
}
услуга
{
"Идентификатор": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": строка,
"publicName": строка,
"tags": строка[],
"trashed": boolean,
"type": строка
}
специализация
{
"Идентификатор": строка,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": строка,
"tags": строка[],
"trashed": boolean
}
пользователь
{
"id": Идентификатор,
"active": активный,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"email": электронная почта,
"firstName": строка,
"fullName": строка,
"innerId": number,
"jobTitle": строка,
"lastName": строка,
"locale": языковой стандарт,
"note": строка,
"role": строка,
"tags": строка[],
"timeZone": string,
"trashed": boolean,
"userName": строка
}
Исполнитель
{
"Идентификатор": строка,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": строка[],
"token": токен,
"trashed": boolean
}
WorkflowStep
{
"Идентификатор": строка,
"abbreviation": строка,
"dateDeleted": Date,
"dateTrashed": Date,
"name": строка,
"order": Идентификатор,
"tags": строка[],
"trashed": boolean
}
Индекс анализа
Агрегация данных
"data": {
"children": {
"type": "analysisType"
}
}
Родительский элемент документа
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Дочерний элемент документа
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": number,
"data": {
"mt": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
"repetitions": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"tm": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match101": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
\"total\": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
}
}
Индекс интерфейса приложений API
Агрегация данных
"data": {
"children": {
\"type\": \"apiType\"
}
}
Родительский элемент документа
{
\"user\": <пользователь>
}
Дочерний элемент документа
{
\"request\": {
\"date\": Date,
\"host\": строка,
\"ipv4\": строка,
\"ipv6\": строка,
\"location\": строка,
\"method\": строка
},
\"response\": {
\"date\": Date,
\"duration\": number,
\"status\": number
},
\"api\": {
\"action\": строка,
\"asynch\": boolean,
"type": строка,
\"uri\": строка,
\"ver\": строка
}
}
Индекс затрат
Агрегация данных
"data": {
"children": {
"type": "costsType"
}
}
Родительский элемент документа
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Дочерний элемент документа
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"расчет стоимости": <расчет стоимости>,
"workflowStep": <WorkflowStep>,
"priority": number,
"data": {
"mt": {
"match0": number,
"match100": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"repetitions": number,
"tm": {
"match0": number,
"match100": number,
"match101": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"total": number
}
}
Индекс заданияPart
Агрегация данных
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
}
}
Родительский элемент документ
{
\"automationWidget\": <AutomationWidget>,
"project": <Project>,
\"услуга\": <Service>
}
Дочерний элемент документ
{
\"задание\": <Job>,
\"заданиеPart\": <JobPart>
"data": {
\"counts\": {
\"chars\": {
\"total\": number,
\"подтверждено\": number,
"notConfirmed": number,
\"заблокированный\": number,
\"notLocked\": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number
},
"groups": {
"total": number
},
"segments": {
\"total\": number,
\"подтверждено\": number,
"notConfirmed": number,
\"заблокированный\": number,
\"notLocked\": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number,
"mt": {
"postEdited": number,
"relevant": number,
"notRelevant": number
},
"qa": {
"checked": number,
"notChecked": number
}
},
"words": {
\"total\": number,
\"подтверждено\": number,
"notConfirmed": number,
\"заблокированный\": number,
\"notLocked\": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number
},
"qa": {
"warnings": number,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP-запросы выполняются в Postman.
-
Войдите через профиль менеджера проекта (PM) или администратора и получите токен входа, используя интерфейс приложений API для входа.
-
POST запросы к
интерфейс приложений API/v3/аналитика/jobPart?токен=<your_login_token>
Общее количество заданий
запрос
{
"aggregations": {
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
В поле aggregations агрегация data ответила 14 417 соответствующими документами, показанными в поле doc_count.
Общее количество слов в оригинал
запрос
{
"aggregations": {
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Общее количество слов в оригинал, разделенное на язык перевод
запрос
{
"aggregations": {
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"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
}
}
}
Сущность сегменты отображается в ответе. Когда модуль аналитика запрашивается разделить данные по некоторой категории, результат представляется как список сегментов. Каждый сегмент содержит ключ, который определяет, какие данные представляет этот сегмент (в данном случае перевод язык), и Значение (другие агрегации), специфичное только для этой части набора данных.
Общее количество заданий, разделенных по статус проект
запрос
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
}
}
}
}
}
}
Ответ
{
"hits": {
"total": 359
},
"aggregations": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"key": "NEW"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"key": "COMPLETED"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"ключ": "ASSIGNED"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"ключ": "DECLINED_BY_VENDOR"
}
]
}
}
}
Модулю аналитика было указано разделить данные по проект статус перед агрегацией данных.
Общее количество заданий из новых проект
запрос
{
"filter": {
"термин": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
\"дочерний элемент\": {
"type": "jobPartType"
}
}
}
}
Ответ
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
Поле фильтровать используется в запросе. Это сужает данные перед последующими агрегациями.