Phrase TMS API

Analytics Aggregations (TMS)

本コンテンツはPhrase Language AIの機械翻訳により、英語から翻訳されています。

集約クエリを実行するデータストアは、Elasticsearch(現在のバージョンは1.7.x)の上に構築されています。Elasticsearchはリアルタイム検索と集約機能を提供し、分析APIがその上に薄いセキュリティ強化レイヤーを形成します。Elasticsearchのクエリおよび集約言語が例で使用されています。

  • クエリJSONのフィルタフィールドで使用される言語は、Elasticsearch Query DSLドキュメントで説明されています。

  • クエリJSONのaggregationsフィールドで使用される言語は、Elasticsearch Aggregationsドキュメントで詳しく説明されています。

インデックス

異なる種類のデータは異なるインデックスに存在します。例えば、ジョブデータはjobPartインデックスに存在し、costsデータはcostsインデックスに存在します。必要なデータは、集約APIエンドポイントURLでインデックスを指定することによって指定できます。

親子ドキュメント

ジョブに関する情報の一部は、Elasticsearch DBの2つの異なるドキュメントに存在します。これらのドキュメントはparent-child関係にあります。例えば、ジョブのプロジェクトに関する情報は親ドキュメントに存在し、ジョブ自体に関する情報は子ドキュメントに存在します。必要な情報に応じて、集約はデータの親-子集約の前または後に行われますが、データ集約自体はすべてのクエリに存在する必要があります。

インデックスデータモデル

共通データ

Analysis

{
  "id": string,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "innerId": number,
  "name": string,
  "tags": string[],
  "trashed": boolean,
  "trashedBy": <User>,
  "type": string
}

割り当て

{
  "name": string,
  "linguist": <User>,
  "vendor": <Vendor>
}

Submitter Portal

{
  "id": string,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "name": 文字列,
  "tags": 文字列[],
  "trashed": boolean,
  "urlId": 文字列
}

バイヤー

{
  "id": 文字列,
  "name": 文字列
}

クライアント

{
  "id": 文字列,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "externalId": 文字列,
  "name": string,
  "tags": string[],
  "trashed": boolean,
}

CostCenter

{
  "id": string,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean,
}

Domain

{
  "id": string,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean
}

ジョブ

{
  "id": string,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "extension": string,
  "fileName": string,
  "groupCount": number,
  "innerId":"1",
  "languagePair": 文字列,
  "lastModified":日付,
  "localePair": 文字列,
  "sourceLanguage": 文字列,
  "sourceLocale": 文字列,
  "tags": 文字列[],
  "targetLanguage": 文字列,
  "targetLocale": 文字列",
  "taskId": 文字列,
  "trashed": boolean,
  "trashedBy": <User>,
  "uid": 文字列
}

JobPart

{
  "id":"19",
  "assignedTo": <Assignment>,
  "beginIndex": number,
  "buyer": <Buyer>,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDue":日付,
  "endIndex": number,
  "groupCount": number,
  "innerId": 文字列,
  "lastModified":日付,
  "level": number,
  "status": ステータス,
  "tags": [],
  "uid": 文字列,
  "workflowStep": <WorkflowStep>
}

MtEngine

{
  "id": 文字列,
  "deleted": boolean,
  "default_: boolean,
  "includeTags": boolean,
  "name": 文字列,
  "tags": 文字列[],
  "type": 文字列,
}

NetRateScheme

{
  "id": 文字列,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDeleted":日付,
  "default_": boolean,
  "deleted": boolean,
  "externalId": 文字列,
  "name": 文字列,
  "tags": 文字列[],
}

PriceList

{
  "id": 文字列,
  "createdBy": <User>,
  "currency": 文字列,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "default_": boolean,
  "deleted": boolean,
  "name": 文字列,
  "tags": 文字列[],
  "trashed": boolean,
  "unit": 文字列
}

プロジェクト

{
  "id": ID,
  "buyer": <Buyer>,
  "client": <Client>,
  "costCenter": <CostCenter>,
  "createdBy": <User>,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateDue":日付,
  "dateTrashed":日付,
  "deleted": boolean, // 削除済みかどうか
  "domain": <Domain>,
  "innerId": number,
  "languagePairs": 文字列[],
  "localePairs": 文字列[],
  "mtEngine": <MtEngine>,
  "name": 文字列,
  "note": 文字列,
  "owner": <User>,
  "sourceLanguage": 文字列,
  "sourceLocale": 文字列,
  "status": ステータス,
  "subDomain": <SubDomain>,
  "tags": 文字列[],
  "targetLanguages": 文字列[],
  "targetLocales": 文字列[],
  "trashed": boolean,
  "trashedBy": <User>,
  "uid": 文字列,
  "vendor": <Vendor>
}

見積もり

{
  "id": 文字列,
  "createdBy": <User>,
  "currency": 文字列,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "innerId": 文字列,
  "name": 文字列,
  "status": ステータス,
  "tags": 文字列[],
  "trashed": boolean,
  "trashedBy": <User>,
  "unit": 文字列
}

サービス

{
  "id": 文字列,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "name": 文字列,
  "publicName": 文字列,
  "tags": 文字列[],
  "trashed": boolean,
  "type": 文字列
}

サブドメイン

{
  "id": 文字列,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "name": 文字列,
  "tags": 文字列[],
  "trashed": boolean
}

ユーザー

{
  "id": number,
  "active": boolean,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean, // 削除済みかどうか
  "email": 文字列, // メールアドレス
  "firstName": 文字列, // 名
  "fullName": 文字列, // 氏名
  "innerId": number,
  "jobTitle": 文字列, // ジョブタイトル
  "lastName": 文字列, // 姓
  "locale": 文字列, // ロケール
  "note": 文字列, // メモ
  "role": 文字列, // 役割
  "tags": 文字列[], // タグ
  "timeZone": 文字列,
  "trashed": boolean,
  "userName": 文字列
}

ベンダー

{
  "id": 文字列,
  "candidate": boolean,
  "dateCreated":日付,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "deleted": boolean,
  "tags": 文字列[],
  "token": 文字列,
  "trashed": boolean
}

WorkflowStep

{
  "id": string,
  "abbreviation": string,
  "dateDeleted":日付,
  "dateTrashed":日付,
  "name": 文字列,
  "order": 数値,
  "tags": 文字列[],
  "trashed": boolean
}

解析インデックス

データ集約

"data": {
  "子": {
    "type": "analysisType"
  }
}

親ドキュメント

{
  "自動化Widget": <AutomationWidget>,
  "プロジェクト": <Project>,
  "サービス": <Service>
}

子ドキュメント

{
  "解析": <Analysis>,
  "jobPart": <JobPart>,
  "ジョブ": <Job>,
  "netRateScheme": <NetRateScheme>,

  "priority": number,
  "data": {
    "mt": {
      "match0": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match100": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match50": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match75": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match85": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match95": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      }
    },
    "繰り返し": {
      "文字": number,
      "pages": number,
      "percent": number,
      "セグメント": number,
      "words": number
    },
    "tm": {
      "match0": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match100": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match101": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match50": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match75": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match85": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      },
      "match95": {
        "文字": number,
        "pages": number,
        "percent": number,
        "セグメント": number,
        "words": number
      }
    },
    "total": {
      "文字": number,
      "pages": number,
      "percent": number,
      "セグメント": number,
      "words": number
    }
  }
}

API インデックス

データ集約

"data": {
  "子": {
    "type": "apiType"
  }
}

親ドキュメント

{
  "ユーザー": <User>
}

子ドキュメント

{
  "request": {
    "date":日付,
    "host": string,
    "ipv4": string,
    "ipv6": string,
    "location": string,
    "method": string
  },
  "response": {
    "date":日付,
    "duration": number,
    "status": number
  },
  "api": {
    "action": string,
    "asynch": boolean,
    "type": string,
    "uri": string,
    "ver": string
  }
}

コストインデックス

データ集計

"data": {
  "子": {
    "type": "costsType"
  }
}

親ドキュメント

{
  "自動化Widget": <AutomationWidget>,
  "プロジェクト": <Project>,
  "サービス": <Service>
}

子ドキュメント

{
  "解析": <Analysis>,
  "ジョブ": <Job>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "見積もり": <Quote>,
  "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
  }
}

ジョブパートインデックス

データ集約

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

親ドキュメント

{
  "自動化Widget": <AutomationWidget>,
  "プロジェクト": <Project>,
  "サービス": <Service>
}

子ドキュメント

{
  "ジョブ": <Job>,
  "jobPart": <JobPart>

  "data": {
    "counts": {
      "文字": {
      "total": number,
      "confirmed": number, // 確定済の数
      "notConfirmed": number,
      "locked": number, // ロック済の数
      "notLocked": number,
      "confirmedAndLocked": number, // 確定済かつロック済の数
      "notConfirmedAndLocked": number,
      "completed": number, // 完了の数
      "notCompleted": number
    },
    "groups": {
      "total": number
    },
    "segments": {
      "total": number,
      "confirmed": number, // 確定済のセグメント数
      "notConfirmed": number,
      "locked": 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,
      "confirmed": number,
      "notConfirmed": number,
      "locked": number,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "completed": number,
      "notCompleted": number
    },
    "qa": {
      "warnings": number,
      "ignoredWarnings": number,
      "notIgnoredWarnings": number
    }
  }
}

  • HTTPリクエストはPostmanで実行します。

  • PMまたは管理者プロファイルでログインし、ログインAPIを使用してログイントークンを取得します。

  • api/v3/analytics/jobPart?token=<your_login_token> にPOSTリクエストを送信します。

ジョブの合計数

クエリ

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

レスポンス

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

集約フィールドの下で、データ集約は14,417件の一致するドキュメントをdoc_countフィールドに表示します。

総原文単語数

クエリ

{
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "wordCount": {
          "sum": {
            "field": "data.volume.words"
          }
        }
      }
    }
  }
}

レスポンス

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

訳文別の原文単語合計数

クエリ

{
  "aggregations": {
    "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
            },
            "キー": "cs"
          },
          {
            "doc_count":1491,
            "wordCount": {
              "value":2602529
            },
            "キー": "de"
          },
          {
            "doc_count":1020,
            "wordCount": {
              "value":92676
            },
            "キー": "fi"
          }
        ]
      },
      "doc_count":14417
    }
  }
}

バケットエンティティが応答に表示されます。分析モジュールがデータを特定のカテゴリで分割するように指示された場合、結果はバケットの一覧として表されます。各バケットには、このバケットが表すデータを定義するキー(この場合は訳文)と、このデータセットのこの部分に特有の値(他の集約)が含まれています。

プロジェクトステータス別のジョブ総数

クエリ

{
  "aggregations": {
    "projectStatus": {
      "terms": {
        "field": "project.status"
      },
      "aggs": {
        "data": {
          "children": {
            "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
          },
          "key":"ASSIGNED"
        },
        {
          "doc_count":1,
          "data": {
            "doc_count":6
          },
          "key":"DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

分析モジュールは、data集約の前にプロジェクトステータス別にデータを分割するように指示されています。

新規プロジェクトからのジョブの総数

クエリ

{
  "filter": {
    "term": {
      "project.status":"NEW"
    }
  },
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

応答

{
  "hits": {
    "total":326
  },
  "aggregations": {
    "data": {
      "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.