集約クエリを実行するデータストアは、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
}
}
}
フィルタフィールドはクエリで使用されます。これは、次の集約の前にデータを絞り込みます。