Der Datenspeicher, der Aggregations-Querys ausführt, basiert auf Elasticsearch (derzeit Version 1.7.X). Elasticsearch bietet Echtzeitsuchen und Aggregationsfunktionen, wobei die Statistiken-API eine schlanke, sicherheitserweiterte Ebene darüber bildet. In den Beispielen wird die Elasticsearch-Query- und Aggregationssprache verwendet.
-
Die Sprache, die im filtern-Feld des Query-JSON verwendet wird, ist in der Dokumentation zu Elasticsearch Query DSL beschrieben.
-
Die Sprache, die im aggregations-Feld des Query-JSON verwendet wird, ist vollständig in der Dokumentation zu Elasticsearch Aggregations beschrieben.
Indizes
Verschiedene Datentypen befinden sich in verschiedenen Indizes. Beispielsweise befinden sich Job-Daten im jobPart-Index und costs-Daten im costs-Index. Erforderliche Daten können durch Angabe des Index in der URL des API-Endpunkts für Aggregationen spezifiziert werden.
Übergeordnetes Element-untergeordnetes Element-Dokumente
Teile der Informationen zu einem Job befinden sich in zwei verschiedenen Dokumenten in der Elasticsearch-DB. Diese Dokumente stehen in einer übergeordnetes Element-untergeordnetes Element-Beziehung. Beispielsweise befinden sich Informationen über das Projekt eines Jobs im übergeordneten Element-Dokument, während sich Informationen über den Job selbst im untergeordneten Element-Dokument befinden. Je nach benötigten Informationen erfolgen Aggregationen entweder vor der übergeordnetes Element-untergeordnetes Element-Datenaggregation oder danach, aber die Datenaggregation selbst sollte in allen Querys vorhanden sein.
Allgemeine Daten
Analyse
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"type": Zeichenfolge
}
Zuweisung
{
"name": Zeichenfolge,
"linguist": <User>,
"vendor": <Vendor>
}
Einreicher-Portal
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean,
"urlId": string
}
Auftraggeber
{
"id": Zeichenfolge,
"name": Zeichenfolge
}
Kunde
{
"id": Zeichenfolge,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": Zeichenfolge,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean,
}
CostCenter
{
"id": Zeichenfolge,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean,
}
Fachbereich
{
"id": Zeichenfolge,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean
}
Job
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": Zeichenfolge,
"fileName": Zeichenfolge,
"groupCount": number,
"innerId": "1",
"languagePair": string,
"lastModified": Date,
"localePair": string,
"sourceLanguage": string,
"sourceLocale": string,
"tags": string[],
"targetLanguage": string,
"targetLocale": string",
"taskId": string,
"trashed": boolean,
"trashedBy": <User>,
"uid": Zeichenfolge
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"endIndex": number,
"groupCount": number,
"innerId": string,
"lastModified": Date,
"level": number,
"status": Zeichenfolge,
"tags": [],
"uid": Zeichenfolge,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": Zeichenfolge,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": Zeichenfolge,
"tags": string[],
"type": Zeichenfolge,
}
NetRateScheme
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": Zeichenfolge,
"name": Zeichenfolge,
"tags": string[],
}
PriceList
{
"id": Zeichenfolge,
"createdBy": <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean,
"unit": Zeichenfolge
}
Projekt
{
"id": Zeichenfolge,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dateTrashed": Date,
"deleted": boolean,
"domain": <Domain>,
"innerId": number,
"languagePairs": string[],
"localePairs": string[],
"mtEngine": <MtEngine>,
"name": Zeichenfolge,
"note": Zeichenfolge,
"owner": <User>,
"sourceLanguage": string,
"sourceLocale": string,
"status": Zeichenfolge,
"subDomain": <SubDomain>,
"tags": string[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": boolean,
"trashedBy": <User>,
"uid": Zeichenfolge,
"vendor": <Vendor>
}
Kostenvoranschlag
{
"id": Zeichenfolge,
"createdBy: <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": Zeichenfolge,
"status": Zeichenfolge,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"unit": Zeichenfolge
}
Dienstleistung
{
"id": Zeichenfolge,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": Zeichenfolge,
"publicName": string,
"tags": string[],
"trashed": boolean,
"type": Zeichenfolge
}
Teilbereich
{
"id": Zeichenfolge,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": Zeichenfolge,
"tags": string[],
"trashed": boolean
}
User
{
"id": number,
"active": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"E-Mail": Zeichenfolge,
"firstName": Zeichenfolge,
"fullName": Zeichenfolge,
"innerId": number,
"jobTitle": string,
"lastName": string,
"Sprache": Zeichenfolge,
"note": Zeichenfolge,
"role": Zeichenfolge,
"tags": string[],
"timeZone": string,
"trashed": boolean,
"userName": Zeichenfolge
}
Auftragnehmer
{
"id": Zeichenfolge,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": string[],
"Token": Zeichenfolge,
"trashed": boolean
}
WorkflowStep
{
"id": Zeichenfolge,
"abbreviation": Zeichenfolge,
"dateDeleted": Date,
"dateTrashed": Date,
"name": Zeichenfolge,
"Reihenfolge": number,
"tags": string[],
"trashed": boolean
}
Analyse-Index
Daten-Aggregation
"data": {
"children": {
"type": "analysisType"
}
}
übergeordnetes Element Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
untergeordnetes Element Dokument
{
"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-Index
Daten-Aggregation
"data": {
"children": {
"type": "apiType"
}
}
übergeordnetes Element Dokument
{
"user": <User>
}
untergeordnetes Element Dokument
{
"request": {
"date": Date,
"host": Zeichenfolge,
"ipv4": Zeichenfolge,
"ipv6": Zeichenfolge,
"location": Zeichenfolge,
"method": Zeichenfolge
},
"Antwort": {
"date": Date,
"duration": number,
"Status": number
},
"API": {
"action": Zeichenfolge,
"asynch": boolean,
"type": Zeichenfolge,
"uri": Zeichenfolge,
"ver": Zeichenfolge
}
}
Kostenindex
Daten-Aggregation
"data": {
"children": {
"type": "costsType"
}
}
übergeordnetes Element Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
untergeordnetes Element Dokument
{
"analysis": <Analysis>,
"Job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"priority": number,
"data": {
"MT": {
"match0": number,
"match100": number,
"match50": Zahl,
"match75": Zahl,
"match85": Zahl,
"match95": Zahl
},
"repetitions": Zahl,
"TM": {
"match0": number,
"match100": number,
"match101": Zahl,
"match50": Zahl,
"match75": Zahl,
"match85": Zahl,
"match95": Zahl
},
"total": Zahl
}
}
Job-Teil-Index
Datenaggregation
\"data\": {
"children": {
\"type\": \"jobPartType\"
}
}
übergeordnetes Element Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
untergeordnetes Element Dokument
{
\"job\": <Job>,
"jobPart": <JobPart>
\"data\": {
\"counts\": {
"chars": {
\"total\": Nummer,
\"confirmed\": Nummer,
\"notConfirmed\": Nummer,
\"locked\": Nummer,
\"notLocked\": Nummer,
"confirmedAndLocked": number,
\"notConfirmedAndLocked\": Nummer,
\"completed\": Nummer,
\"notCompleted\": Nummer
},
"groups": {
\"total\": Nummer
},
"segments": {
\"total\": Nummer,
\"confirmed\": Nummer,
\"notConfirmed\": Nummer,
\"locked\": Nummer,
\"notLocked\": Nummer,
"confirmedAndLocked": number,
\"notConfirmedAndLocked\": Nummer,
\"completed\": Nummer,
"notCompleted": number,
"MT": {
"postEdited": number,
"relevant": number,
"notRelevant": number
},
"qa": {
"checked": number,
"notChecked": number
}
},
"words": {
\"total\": Nummer,
\"confirmed\": Nummer,
\"notConfirmed\": Nummer,
\"locked\": Nummer,
\"notLocked\": Nummer,
"confirmedAndLocked": number,
\"notConfirmedAndLocked\": Nummer,
\"completed\": Nummer,
\"notCompleted\": Nummer
},
"qa": {
"warnings": number,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP-Anfragen werden in Postman ausgeführt.
-
Melden Sie sich über ein PM- oder Admin-Profil an und erhalten Sie ein Anmelde-Token über eine Login-API.
-
POST-Anfragen an
api/v3/analytics/jobPart?token=<your_login_token>
Gesamtzahl der Jobs
Query
{
"aggregations": {
\"data\": {
"children": {
\"type\": \"jobPartType\"
}
}
}
}
Antwort
{
"hits": {
"total": 359
},
"aggregations": {
\"data\": {
"doc_count": 14417
}
}
}
Unter dem Feld aggregations antwortete die data-Aggregation mit 14.417 übereinstimmenden Dokumenten, die im Feld doc_count angezeigt werden.
Gesamtzahl der Wörter der Ausgangssprache
Query
{
"aggregations": {
\"data\": {
"children": {
\"type\": \"jobPartType\"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Antwort
{
"hits": {
"total": 359
},
"aggregations": {
\"data\": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Gesamtzahl der Wörter der Ausgangssprache aufgeteilt nach Sprache
Query
{
"aggregations": {
\"data\": {
"children": {
\"type\": \"jobPartType\"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Antwort
{
"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
}
}
}
Die Buckets-Entität wird in der Antwort angezeigt. Wenn das Statistiken-Modul aufgefordert wird, die Daten nach einer Kategorie aufzuteilen, wird das Ergebnis als eine Liste von Buckets dargestellt. Jeder Bucket enthält einen Key, der definiert, welche Daten dieser Bucket repräsentiert (in diesem Fall eine Sprache), und einen Wert (weitere Aggregationen), der spezifisch für diesen Teil des Datensatzes ist.
Gesamtzahl der Jobs aufgeteilt nach Projekt Status
Query
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
\"data\": {
"children": {
\"type\": \"jobPartType\"
}
}
}
}
}
}
Antwort
{
"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"
}
]
}
}
}
Das Statistiken-Modul wurde angewiesen, die Daten vor der Daten-Aggregation nach Projekt Status aufzuteilen.
Gesamtzahl der Jobs aus neuen Projekten
Query
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
\"data\": {
"children": {
\"type\": \"jobPartType\"
}
}
}
}
Antwort
{
"hits": {
"total": 326
},
"aggregations": {
\"data\": {
"doc_count": 14318
}
}
}
Das Filtern-Feld wird in der Query verwendet. Dies schränkt die Daten vor den nachfolgenden Aggregationen ein.