Интерфейс приложений API Phrase TMS

Analytics Aggregations (TMS)

Контент автоматически переведен с английского языка с помощью Phrase Language AI.

Хранилище данных, выполняющее агрегирующие запросы, построено на базе Elasticsearch (в настоящее время версия 1.7.x). Elasticsearch предоставляет возможности поиска в реальном времени и агрегации, а интерфейс приложений API Analytics образует тонкий, усиленный с точки зрения безопасности слой поверх него. В примерах используется язык запросов и агрегаций Elasticsearch.

  • Язык, используемый в поле filter JSON-запроса, описан в документации Elasticsearch Query DSL.

  • Язык, используемый в поле aggregations запроса JSON, полностью описан в документации Elasticsearch Aggregations.

Индексы

Разные типы данных находятся в разных индексах. Например, данные задание находятся в индексе ЧастьЗадания, а данные costs находятся в индексе costs. Необходимые данные могут быть указаны, задав индекс в URL-адресе конечной точки API агрегации.

Документы «родительский элемент — дочерний элемент»

Части информации о задании находятся в двух разных документах в базе данных Elasticsearch. Эти документы находятся в отношении «родительский элемент — дочерний элемент». Например, информация о проекте задания находится в родительском документе, в то время как информация о самом задании находится в дочернем документе. В зависимости от требуемой информации, агрегация располагается либо перед агрегированием данных по схеме «родительский элемент — дочерний элемент», либо после неё, при этом сама агрегация данных должна присутствовать во всех запросах.

Модели данных индекса

Общие данные

Анализ

{
  "id": строка,
  "createdBy": <пользователь>,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "deleted": булево,
  "innerId": число,
  "name": строка,
  "tags": строка[],
  "trashed": булево,
  "trashedBy": <User>,
  "type": строка
}

Назначение

{
  "имя": строка,
  "лингвист": <пользователь>,
  "исполнитель": <исполнитель>
}

Портал отправителя

{
  "id": строка,
  "createdBy": <Пользователь>,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "имя": строка,
  "tags": строка[],
  "вКорзине": булево,
  "urlId": строка
}

Покупатель

{
  "id": строка,
  "имя": строка
}

Клиент

{
  "id": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "externalId": строка,
  "имя": строка,
  "tags": string[],
  "trashed": булево,
}

CostCenter

{
  "id": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "имя": строка,
  "теги": string[],
  "вКорзине": булево,
}

Отрасль

{
  "идентификатор": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "имя": строка,
  "теги": string[],
  "вКорзине": булево
}

Задание

{
  "id": строка,
  "createdBy": <Пользователь>,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "deleted": булево,
  "extension": строка,
  "fileName": строка,
  "groupCount": число,
  "innerId": "1",
  "languagePair": строка,
  "lastModified": Дата,
  "localePair": строка,
  "sourceLanguage": строка,
  "sourceLocale": строка,
  "tags": строка[],
  "targetLanguage": строка,
  "targetLocale": строка",
  "taskId": строка,
  "вКорзине": булево,
  "trashedBy": <Пользователь>,
  "uid": строка
}

ЧастьЗадания

{
  "id": "19",
  "assignedTo": <Назначение>,
  "beginIndex": число,
  "buyer": <Покупатель>,
  "createdBy": <Пользователь>,
  "dateCreated": Дата,
  "dateDue": Дата,
  "endIndex": число,
  "groupCount": число,
  "innerId": строка,
  "lastModified": Дата,
  "level": число,
  "status": строка,
  "tags": [],
  "uid": строка,
  "workflowStep": <WorkflowStep>
}

MtEngine

{
  "id": строка,
  "deleted": булево,
  "default_: булево,
  "includeTags": boolean,
  "имя": строка,
  "tags": string[],
  "type": строка,
}

NetRateScheme

{
  "id": строка,
  "createdBy": <Пользователь>,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "default_": boolean,
  "deleted": boolean,
  "externalId": строка,
  "name": строка,
  "tags": string[],
}

PriceList

{
  "id": строка,
  "createdBy": <Пользователь>,
  "currency": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "default_": boolean,
  "удалено": булево,
  "имя": строка,
  "теги": строка[],
  "вКорзине": булево,
  "unit": строка
}

Project

{
  "id": строка,
  "buyer": <Покупатель>,
  "client": <Клиент>,
  "costCenter": <CostCenter>,
  "createdBy": <Пользователь>,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateDue": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "domain": <Domain>,
  "внутреннийId": число,
  "languagePairs": строка[],
  "localePairs": строка[],
  "mtEngine": <MtEngine>,
  "имя": строка,
  "note": строка,
  "owner": <пользователь>,
  "sourceLanguage": строка,
  "sourceLocale": строка,
  "status": строка,
  "subDomain": <специализация>,
  "tags": string[],
  "targetLanguages": string[],
  "targetLocales": string[],
  "trashed": булево,
  "trashedBy": <пользователь>,
  "uid": строка,
  "исполнитель": <исполнитель>
}

расчет стоимости

{
  "id": строка,
  "createdBy": <пользователь>,
  "currency": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "innerId": строка,
  "имя": строка,
  "status": строка,
  "tags": строка[],
  "вКорзине": булево,
  "trashedBy": <пользователь>,
  "unit": строка
}

услуга

{
  "id": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "удалено": булево,
  "имя": строка,
  "publicName": строка,
  "tags": string[],
  "вКорзине": булево,
  "тип": строка
}

специализация

{
  "id": строка,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "deleted": булево,
  "name": строка,
  "tags": string[],
  "trashed": булево,
}

пользователь

{
  "id": number,
  "active": булево,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "deleted": булево,
  "электронная почта": строка,
  "firstName": строка,
  "fullName": строка,
  "innerId": число,
  "jobTitle": строка,
  "lastName": строка,
  "языковой стандарт": строка,
  "note": строка,
  "role": строка,
  "tags": string[],
  "timeZone": строка,
  "trashed": булево,
  "userName": строка
}

исполнитель

{
  "id": строка,
  "candidate": булево,
  "dateCreated": Дата,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "deleted": булево,
  "tags": string[],
  "token": строка,
  "trashed": булево
}

WorkflowStep

{
  "id": строка,
  "abbreviation": строка,
  "dateDeleted": Дата,
  "dateTrashed": Дата,
  "name": строка,
  "order": число,
  "tags": string[],
  "вКорзине": булево
}

Индекс анализа

Агрегация данных

"data": {
  "children": {
    "type": "analysisType"
  }
}

Родительский документ

{
  "automationWidget": <AutomationWidget>,
  "проект": <Project>,
  "service": <Service>
}

Дочерний документ

{
  "analysis": <Analysis>,
  "jobPart": <JobPart>,
  "задание": <Job>,
  "netRateScheme": <NetRateScheme>,

  "priority": число,
  "data": {
    "машинный перевод (МТ)": {
      "совпадение0": {
        "character": число,
        "страницы": число,
        "процент": число,
        "сегмент": число,
        "слова": число
      },
      "совпадение100": {
        "character": число,
        "страницы": число,
        "процент": число,
        "сегмент": число,
        "слова": число
      },
      "совпадение50": {
        "character": число,
        "страницы": число,
        "процент": число,
        "segments": number,
        "words": число
      },
      "совпадение75": {
        "characters": число,
        "страницы": число,
        "процент": число,
        "segments": number,
        "words": число
      },
      "совпадение85": {
        "characters": число,
        "страницы": число,
        "процент": число,
        "segments": number,
        "words": число
      },
      "совпадение95": {
        "characters": число,
        "страницы": число,
        "процент": число,
        "segments": number,
        "words": число
      }
    },
    "repetitions": {
      "символы": число,
      "страницы": число,
      "процент": число,
      "сегменты": число,
      "слова": число
    },
    "память переводов": {
      "match0": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match100": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match101": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match50": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match75": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match85": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      },
      "match95": {
        "символы": число,
        "страницы": число,
        "процент": число,
        "сегменты": число,
        "слова": число
      }
    },
    "всего": {
      "символы": число,
      "страницы": число,
      "процент": число,
      "сегменты": число,
      "слова": число
    }
  }
}

Индекс интерфейса приложений API

Агрегация данных

"data": {
  "children": {
    "тип": "apiType"
  }
}

Родительский документ

{
  "пользователь": <User>
}

Дочерний документ

{
  "запрос": {
    "date": Дата,
    "хост": строка,
    "ipv4": строка,
    "ipv6": строка,
    "местоположение": строка,
    "метод": строка
  },
  "response": {
    "date": Дата,
    "длительность": число,
    "статус": число
  },
  "api": {
    "действие": строка,
    "asynch": логическое значение,
    "type": строка,
    "uri": строка,
    "ver": строка
  }
}

Индекс затрат

Агрегация данных

"data": {
  "children": {
    "type": "costsType"
  }
}

Родительский документ

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

Дочерний документ

{
  "analysis": <Analysis>,
  "job": <Job>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "расчет стоимости": <Quote>,
  "workflowStep": <WorkflowStep>,
  
  "priority": число,
  "data": {
    "mt": {
      "совпадение0": число,
      "совпадение100": число,
      "совпадение50": число,
      "совпадение75": число,
      "совпадение85": число,
      "совпадение95": число
    },
    "repetitions": число,
    "tm": {
      "совпадение0": число,
      "совпадение100": число,
      "совпадение101": число,
      "совпадение50": число,
      "совпадение75": число,
      "совпадение85": число,
      "совпадение95": число
    },
    "total": число
  }
}

Индекс части задания

Агрегация данных

"data": {
  "children": {
    "type": "jobPartType"
  }
}

Родительский документ

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

Дочерний документ

{
  "job": <Job>,
  "jobPart": <JobPart>

  "data": {
    "counts": {
      "chars": {
      "total": число,
      "confirmed": число,
      "notConfirmed": число,
      "locked": число,
      "notLocked": число,
      "подтверждено и заблокировано": число,
      "неподтверждено и заблокировано": число,
      "завершить": число,
      "неЗавершить": число
    },
    "группы": {
      "total": число
    },
    "segments": {
      "total": число,
      "confirmed": число,
      "notConfirmed": число,
      "locked": число,
      "notLocked": число,
      "подтверждено и заблокировано": число,
      "неподтверждено и заблокировано": число,
      "завершить": число,
      "неЗавершить": число,
      "mt": {
        "postEdited": number,
        "релевантно": число,
        "неРелевантно": число
      },
      "контроль качества (QA)": {
        "проверено": число,
        "неПроверено": число
      }
    },
    "слова": {
      "total": число,
      "подтверждено": число,
      "notConfirmed": число,
      "заблокировано": число,
      "notLocked": число,
      "подтвержденоИзаблокировано": число,
      "неПодтвержденоИзаблокировано": число,
      "завершить": число,
      "не завершить": число
    },
    "контроль качества (QA)": {
      "предупреждения": число,
      "игнорируемыеПредупреждения": число,
      "неИгнорируемыеПредупреждения": число
    }
  }
}

Примеры

  • HTTP-запросы выполняются в Postman.

  • Войдите через профиль менеджера проекта (PM) или администратора и получите токен входа, используя интерфейс приложений API для входа.

  • POST запросы к api/v3/analytics/jobPart?token=&lt;ваш_токен_входа&gt;

Общее количество заданий

Запрос

{
  "агрегации": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Ответ

{
  "hits": {
    "total": 359
  },
  "агрегации": {
    "data": {
      "doc_count": 14417
    }
  }
}

Под полем aggregations агрегация data вернула 14 417 совпадающих документов, отображённых в поле doc_count.

Общее количество слов в оригинале

Запрос

{
  "агрегации": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "wordCount": {
          "sum": {
            "field": "data.volume.words"
          }
        }
      }
    }
  }
}

Ответ

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "doc_count": 14417,
      "wordCount": {
        "value": 6893067
      }
    }
  }
}

Общее количество слов в оригинале, разделённое по языку перевода

Запрос

{
  "агрегации": {
    "data": {
      "children": {
        "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
    }
  }
}

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

Общее количество заданий, разделённое по статусу проекта

Запрос

{
  "агрегации": {
    "projectStatus": {
      "terms": {
        "поле": "project.status"
      },
      "aggs": {
        "data": {
          "children": {
            "type": "jobPartType"
          }
        }
      }
    }
  }
}

Ответ

{
  "hits": {
    "total": 359
  },
  "агрегации": {
    "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": "COMPLETE"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 4
          },
          "key": "ASSIGN"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 6
          },
          "key": "DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

Модуль аналитики был проинструктирован разделить данные по статусу проекта перед агрегацией data.

Общее количество заданий из новых проектов

Запрос

{
  "фильтр": {
    "термин": {
      "project.status": "NEW"
    }
  },
  "агрегации": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Ответ

{
  "hits": {
    "total": 326
  },
  "агрегации": {
    "data": {
      "doc_count": 14318
    }
  }
}

Поле filter используется в запросе. Это сужает данные перед последующими агрегациями.

Была ли эта статья полезной?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.