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

Агрегированные показатели аналитики (TMS)

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

Запросы агрегирования в хранилище данных созданы на основе технологии 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
    }
  }
}

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

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

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.