集計クエリを実行するデータストアは Elasticsearch (現在はバージョン1.7.x)上に構築されています。Elasticsearchは分析APIでリアルタイムの検索と集計機能を提供し、その上に薄いセキュリティ強化レイヤーを形成します。例では、Elasticsearchクエリおよび集約言語を使用しています。
-
クエリ JSON のフィルタフィールドで使用される言語は、 Elasticsearch クエリ DSL のドキュメントで説明されています。
-
クエリJSONのアグリゲーションフィールドで使用される言語については、 Elasticsearch Aggregations のマニュアルを参照してください。
インデックス
異なるタイプのデータは、異なるインデックスに格納されます。たとえば、ジョブデータはjobPartインデックスに存在し、コストデータはコストインデックスに存在しています。集約APIエンドポイントURLでインデックスを指定することで、必要なデータを指定できます。
親子文書
ジョブに関する情報の一部は、Elasticsearch DB内の2つの異なるドキュメントに格納されます。これらのドキュメントは親と子の関係にあります。たとえば、ジョブのプロジェクトに関する情報は親ドキュメントに存在し、ジョブ自体は子ドキュメントに存在します。必要な情報に応じて、集計はデータ親子集計の前または後のいずれかになりますが、データ集計自体はすべてのクエリに存在する必要があります。
共通データ
解析
{ "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> }
提出者ポータル
{ "id": string, "createdBy": <User>, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, "urlId": string }
バイヤー
{ "id": string, "name": string }
クライアント
{ "id": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "externalId": string, "name": string, "tags": string[], "trashed": boolean, }
CostCenter
{ "id": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, }
ドメイン
{ "id": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "name": string, "tags": string[], "trashed": boolean }
Job
{ "id": string, "createdBy": <User>, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "extension": string, "fileName": string, "groupCount": number, "innerId":"1", "languagePair": string, "lastModified":日付、 "localePair": string, "sourceLanguage": string, "sourceLocale": string, "tags": string[], "targetLanguage": string, "targetLocale": string", "taskId": string, "trashed": boolean, "trashedBy": <User>, "uid": string }
JobPart
{ "id":"19", "assignedTo": <Assignment>, "beginIndex": number, "buyer": <Buyer>, "createdBy": <User>, "dateCreated":日付、 "dateDue":日付、 "endIndex": number, "groupCount": number, "innerId": string, "lastModified":日付、 "level": number, "status": string, "tags": [], "uid": string, "workflowStep": <WorkflowStep> }
MtEngine
{ "id": string, "deleted": boolean, "default_: boolean, "includeTags": boolean, "name": string, "tags": string[], "type": string, }
NetRateScheme
{ "id": string, "createdBy": <User>, "dateCreated":日付、 "dateDeleted":日付、 "default_": boolean, "deleted": boolean, "externalId": string, "name": string, "tags": string[], }
PriceList
{ "id": string, "createdBy": <User>, "currency": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "default_": boolean, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, "unit": string }
プロジェクト
{ "id": string, "buyer": <Buyer>, "client": <Client>, "costCenter": <CostCenter>, "createdBy": <User>, "dateCreated":日付、 "dateDeleted":日付、 "dateDue":日付、 "dateTrashed":日付、 "deleted": boolean, "domain": <Domain>, "innerId": number, "languagePairs": string[], "localePairs": string[], "mtEngine": <MtEngine>, "name": string, "note": string, "オーナー": <ユーザー>, "sourceLanguage": string, "sourceLocale": string, "status": string, "subDomain": <SubDomain>, "tags": string[], "targetLanguages": string[], "targetLocales": string[], "trashed": boolean, "trashedBy": <User>, "uid": string, "vendor": <Vendor> }
見積もり
{ "id": string, "createdBy: <User>, "currency": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "innerId": string, "name": string, "status": string, "tags": string[], "trashed": boolean, "trashedBy": <User>, "unit": string }
サービス
{ "id": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "name": string, "publicName": string, "tags": string[], "trashed": boolean, "type": string }
SubDomain
{ "id": string, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "name": string, "tags": string[], "trashed": boolean }
ユーザー
{ "id": number, "active": boolean, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "email": string, "firstName": string, "fullName": string, "innerId": number, "jobTitle": string, "lastName": string, "locale": string, "note": string, "role": string, "tags": string[], "timeZone": string, "trashed": boolean, "userName": string }
ベンダー
{ "id": string, "candidate": boolean, "dateCreated":日付、 "dateDeleted":日付、 "dateTrashed":日付、 "deleted": boolean, "tags": string[], "token": string, "trashed": boolean }
WorkflowStep
{ "id": string, "abbreviation": string, "dateDeleted":日付、 "dateTrashed":日付、 "name": string, "order": number, "tags": string[], "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": <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": { "children": { "type": "costsType" } }
親ドキュメント
{ "automationWidget": <AutomationWidget>, "project": <Project>, "service": <Service> }
子ドキュメント
{ "analysis": <Analysis>, "job": <Job>, "jobPart": <JobPart>, "netRateScheme": <NetRateScheme>, "priceList": <PriceList>, "quote": <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 } }
jobPart Index
データ集約
"data": { "children": { "type": "jobPartType" } }
親ドキュメント
{ "automationWidget": <AutomationWidget>, "project": <Project>, "service": <Service> }
子ドキュメント
{ "job": <Job>, "jobPart": <JobPart> "data": { "counts": { "chars": { "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 を使用してログイントークンを取得します。
-
POST requests to
api/v3/analytics/jobPart?token=<your_login_token>
合計ジョブ数
クリエ
{ "aggregations": { "data": { "children": { "type": "jobPartType" } } } }
レスポンス
{ "hits": { "total":359 }, "aggregations": { "data": { "doc_count":14417 } } }
集計フィールドの下で、データ集計は、doc_countフィールドに表示されている14,417件の一致するドキュメントで応答しました。
原文単語の合計数
クリエ
{ "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 }, "key": "cs" }, { "doc_count":1491, "wordCount": { "value":2602529 }, "key": "de" }, { "doc_count":1020, "wordCount": { "value":92676 }, "key": "fi" } ] }, "doc_count":14417 } } }
バケット エンティティは応答に表示されます。Analyticsモジュールが何らかのカテゴリによるデータの分割を要求すると、結果はバケットの一覧として表示されます。各バケットには、このバケットが表すデータ(この場合は訳文言語)を定義するキーと、データセットのこの部分に固有の値(その他の集計)が含まれます。
プロジェクトステータスごとの合計ジョブ数
クリエ
{ "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":「完了済」 }, { "doc_count":1, "data": { "doc_count":4 }, "key":「割り当て済」 }, { "doc_count":1, "data": { "doc_count":6 }, "key":"DECLINED_BY_VENDOR" } ] } } }
分析モジュールは、データ集約の前にプロジェクトステータスごとにデータを分割するように指示されました。
新規プロジェクトの合計ジョブ数
クリエ
{ "filter": { "term": { "project.status":"NEW" } }, "aggregations": { "data": { "children": { "type": "jobPartType" } } } }
対応
{ "hits": { "total":326 }, "aggregations": { "data": { "doc_count":14318 } } }
フィルタフィールドはクエリで使用されます。これにより、集計の前にデータが絞り込まれます。