Der Datenspeicher, der Aggregationsabfragen ausführt, basiert auf Elasticsearch (derzeit Version 1.7.x). Elasticsearch bietet Echtzeitsuchen und Aggregationsmöglichkeiten, wobei die Analytics API eine schlanke, sicherheitsverbesserte Schicht darüber bildet. Die Abfrage- und Aggregationssprache von Elasticsearch wird in den Beispielen verwendet.
-
Die Sprache, die im filter Feld des Abfrage-JSON verwendet wird, wird in der Elasticsearch Query DSL Dokumentation beschrieben.
-
Die Sprache, die im aggregations Feld des Abfrage-JSON verwendet wird, wird vollständig in der Elasticsearch Aggregations Dokumentation beschrieben.
Indizes
Verschiedene Datentypen befinden sich in verschiedenen Indizes. Zum Beispiel befinden sich job Daten im jobPart Index, und costs Daten befinden sich im costs Index. Erforderliche Daten können angegeben werden, indem der Index in der Aggregations-API-Endpunkt-URL spezifiziert wird.
Übergeordnetes Element – untergeordnetes Element Dokumente
Teile der Informationen zu einem Job befinden sich in zwei verschiedenen Dokumenten in der Elasticsearch-Datenbank. Diese Dokumente stehen in einer übergeordnetes Element–untergeordnetes Element Beziehung. Beispielsweise befinden sich Informationen zum Projekt eines Jobs im übergeordneten Dokument, während Informationen zum Job selbst im untergeordneten Dokument gespeichert sind. Je nach erforderlichen Informationen befinden sich die Aggregationen entweder vor der Daten-übergeordnetes Element–untergeordnetes Element-Aggregation oder danach, aber die Datenaggregation selbst sollte in allen Abfragen enthalten sein.
Gemeinsame Daten
Analyse
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"innerId": number,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean,
"trashedBy": <User>,
"type": Zeichenfolge
}
Zuweisung
{
"name": Zeichenfolge,
"linguist": <User>,
"vendor": <Auftragnehmer>
}
Submitter Portal
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean,
"urlId": string
}
Auftraggeber
{
"id": Zeichenfolge,
"name": Zeichenfolge
}
Kunde
{
"id": Zeichenfolge,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"externalId": Zeichenfolge,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean,
}
CostCenter
{
"id": Zeichenfolge,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean,
}
Fachbereich
{
"id": Zeichenfolge,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean
}
Job
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"extension": Zeichenfolge,
"fileName": Zeichenfolge,
"groupCount": number,
"innerId": "1",
"languagePair": Zeichenfolge,
"lastModified": Datum,
"localePair": Zeichenfolge,
"sourceLanguage": Zeichenfolge,
"sourceLocale": Zeichenfolge,
"tags": Zeichenfolge[],
"targetLanguage": Zeichenfolge,
"targetLocale": Zeichenfolge,
"taskId": Zeichenfolge,
"trashed": boolean,
"trashedBy": <User>,
"uid": Zeichenfolge
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Datum,
"dateDue": Datum,
"endIndex": number,
"groupCount": number,
"innerId": string,
"lastModified": Datum,
"level": number,
"status": Status,
"tags": [],
"uid": Zeichenfolge,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": Zeichenfolge,
"gelöscht": boolean,
"default_: boolean,
"includeTags": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"type": Zeichenfolge,
}
NetRateScheme
{
"id": Zeichenfolge,
"createdBy": <User>,
"dateCreated": Datum,
"dateDeleted": Datum,
"default_": boolean,
"gelöscht": boolean,
"externalId": Zeichenfolge,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
}
Preisliste
{
"id": Zeichenfolge,
"createdBy": <User>,
"currency": Zeichenfolge,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"default_": boolean,
"deleted": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"trashed": boolean,
"unit": Zeichenfolge
}
Projekt
{
"id": Zeichenfolge,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateDue": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"domain": <Domain>,
"innerId": number,
"languagePairs": string[],
"localePairs": string[],
"mtEngine": <MtEngine>,
"name": string,
"note": string,
"owner": <User>,
"sourceLanguage": string,
"sourceLocale": Zeichenfolge,
"status": Status,
"subDomain": <SubDomain>,
"tags": Zeichenfolge[],
"targetLanguages": Zeichenfolge[],
"targetLocales": Zeichenfolge[],
"trashed": boolean,
"trashedBy": <User>,
"uid": Zeichenfolge,
"vendor": <Vendor>
}
Kostenvoranschlag
{
"id": Zeichenfolge,
"createdBy: <User>,
"currency": Zeichenfolge,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"innerId": Zeichenfolge,
"name": Zeichenfolge,
"status": Zeichenfolge,
"tags": Tag[],
"trashed": boolean,
"trashedBy": <User>,
"unit": Zeichenfolge
}
Service
{
"id": ID,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"name": Zeichenfolge,
"publicName": string,
"tags": Zeichenfolge[],
"inPapierkorb": boolean,
"typ": Zeichenfolge
}
SubDomain
{
"id": ID,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"name": Zeichenfolge,
"tags": Zeichenfolge[],
"inPapierkorb": boolean
}
User
{
"id": ID,
"active": boolean,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"gelöscht": boolean,
"email": Zeichenfolge,
"firstName": Zeichenfolge,
"fullName": Zeichenfolge,
"innerId": number,
"jobTitle": Zeichenfolge,
"lastName": Zeichenfolge,
"locale": Zeichenfolge,
"note": Zeichenfolge,
"role": Zeichenfolge,
"tags": Tag[],
"timeZone": Zeichenfolge,
"trashed": boolean,
"userName": Zeichenfolge
}
Auftragnehmer
{
"id": Zeichenfolge,
"candidate": boolean,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"tags": Zeichenfolge[],
"token": Token,
"trashed": boolean
}
WorkflowStep
{
"id": Zeichenfolge,
"abbreviation": Zeichenfolge,
"dateDeleted": Datum,
"dateTrashed": Datum,
"name": Zeichenfolge,
"Reihenfolge": Zahl,
"tags": Zeichenfolge[],
"trashed": boolean
}
Analyse-Index
Datenaggregation
"data": {
"children": {
"type": "analysisType"
}
}
Übergeordnetes Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Untergeordnetes Dokument
{
"Analyse": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priorität": Zahl,
"data": {
"mt": {
"Match0": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"segments": Zahl,
"words": Zahl,
},
"Match100": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"segments": Zahl,
"words": Zahl,
},
"Match50": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"segments": Zahl,
"words": Zahl,
},
"Match75": {
"character": Zahl,
"seiten": Zahl,
"percent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match85": {
"Zeichen": Zahl,
"Seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match95": {
"Zeichen": Zahl,
"Seiten": Zahl,
"percent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
}
},
"Wiederholung": {
"Zeichen": Zahl,
"Seiten": Zahl,
"percent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"TM": {
"Match0": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match100": {
"character": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match101": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match50": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match75": {
"Zeichen": Zahl,
"Seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match85": {
"Zeichen": Zahl,
"Seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
},
"Match95": {
"Zeichen": Zahl,
"Seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
}
},
"total": {
"Zeichen": Zahl,
"seiten": Zahl,
"prozent": Zahl,
"Segment": Zahl,
"Wörter": Zahl
}
}
}
API-Index
Datenaggregation
"data": {
"children": {
"type": "apiType"
}
}
Übergeordnetes Dokument
{
"user": <User>
}
Untergeordnetes Dokument
{
"request": {
"date": Datum,
"host": Zeichenfolge,
"ipv4": Zeichenfolge,
"ipv6": Zeichenfolge,
"standort": Zeichenfolge,
"Methode": Zeichenfolge,
},
"Antwort": {
"date": Datum,
"Dauer": Zahl,
"Status": Zahl
},
"API": {
"Aktion": Zeichenfolge,
"asynch": boolean,
"type": Zeichenfolge,
"uri": Zeichenfolge,
"ver": Zeichenfolge
}
}
Kostenindex
Datenaggregation
"data": {
"children": {
"type": "costsType"
}
}
Übergeordnetes Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Untergeordnetes Dokument
{
"analysis": <Analyse>,
"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
},
"Wiederholung": number,
"TM": {
"Match0": number,
"Match100": number,
"Match101": number,
"Match50": number,
"Match75": number,
"Match85": number,
"Match95": number
},
"total": zahl
}
}
jobPart Index
Datenaggregation
"data": {
"children": {
"type": "jobPartType"
}
}
Übergeordnetes Dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Untergeordnetes Dokument
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"counts": {
"chars": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"gesperrt": number,
"nichtGesperrt": number,
"bestätigtUndGesperrt": number,
"nichtBestätigtUndGesperrt": number,
"abgeschlossen": number,
"nichtAbgeschlossen": number
},
"groups": {
"total": number
},
"Segment": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"gesperrt": number,
"notLocked": number,
"bestätigtUndGesperrt": number,
"nichtBestätigtUndGesperrt": number,
"abgeschlossen": number,
"nichtAbgeschlossen": number,
"MT": {
"postEdited": number,
"relevant": number,
"notRelevant": number
},
"qa": {
"checked": number,
"notChecked": number
}
},
"Wörter": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"gesperrt": number,
"notLocked": number,
"bestätigtUndGesperrt": number,
"nichtBestätigtUndGesperrt": number,
"abgeschlossen": number,
"nichtAbgeschlossen": number
},
"qa": {
"warnings": number,
"ignorierteWarnungen": Zahl,
"nichtIgnorierteWarnungen": Zahl
}
}
}
-
HTTP-Anfragen werden in Postman ausgeführt.
-
Über ein PM- oder Admin-Profil anmelden und ein Login-Token über eine Login-API erhalten.
-
POST-Anfragen an
api/v3/analytics/jobPart?token=<your_login_token>
Gesamtanzahl der Jobs
Query
{
"Aggregationen": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Antwort
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
Unter dem aggregations-Feld hat die data-Aggregation mit 14.417 übereinstimmenden Dokumenten geantwortet, die im doc_count-Feld angezeigt werden.
Gesamtanzahl der Ausgangswörter
Query
{
"Aggregationen": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Antwort
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Gesamtanzahl der Wörter der Ausgangssprache geteilt durch die Zielsprache
Query
{
"Aggregationen": {
"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 bestimmten Kategorie aufzuteilen, wird das Ergebnis als Liste von Buckets dargestellt. Jeder Bucket enthält einen Schlüssel, der definiert, welche Daten dieser Bucket repräsentiert (in diesem Fall eine Zielsprache) und einen Wert (andere Aggregationen), der spezifisch nur für diesen Teil des Datensatzes ist.
Gesamtzahl der Jobs, geteilt nach Projektstatus
Query
{
"Aggregationen": {
"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": "ABGESCHLOSSEN"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ZUGEWIESEN"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Das Statistiken-Modul wurde angewiesen, die Daten vor der data Aggregation nach Projektstatus aufzuteilen.
Gesamtzahl der Jobs aus neuen Projekten
Query
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"Aggregationen": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Antwort
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
Das filter Feld wird in der Query verwendet. Dies schränkt die Daten vor den folgenden Aggregationen ein.