Le magasin de données exécutant les requêtes d'agrégation est construit au-dessus de Elasticsearch (actuellement version 1.7.x). Elasticsearch fournit des recherches en temps réel et des capacités d'agrégation, l'API analytique formant une couche fine et sécurisée au-dessus. La langue de requête et d'agrégation Elasticsearch est utilisée dans les exemples.
-
La langue utilisée dans le champ filtre de la requête JSON est décrite dans la documentation Elasticsearch Query DSL.
-
La langue utilisée dans le champ aggregations de la requête JSON est entièrement décrite dans la documentation Elasticsearch Aggregations.
Indexes
Différents types de données résident dans différents index. Par exemple, les données de tâche résident dans l'index jobPart, et les données de costs résident dans l'index costs. Les données requises peuvent être spécifiées en indiquant l'index dans l'URL du point de terminaison de l'API analytique.
Documents parent-enfant
Des parties des informations sur une tâche se trouvent dans deux documents différents dans la base de données Elasticsearch. Ces documents sont dans une relation parent-enfant. Par exemple, les informations sur le projet d'une tâche se trouvent dans le document parent, tandis que les informations sur la tâche elle-même se trouvent dans le document enfant. Selon les informations requises, les agrégations se situent soit avant l'agrégation parent-enfant des données, soit après, mais l'agrégation des données elle-même doit être présente dans toutes les requêtes.
Données communes
Analyse
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": chaîne,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"type": string
}
Affectation
{
"name": chaîne,
"linguist": <User>,
"vendor": <Vendor>
}
submitter portalportail de l’envoyeur
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": chaîne,
"tags": string[],
"trashed": boolean,
"urlId": string
}
Buyer
{
"id": string,
"name": chaîne
}
Client
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": string,
"name": chaîne,
"tags": string[],
"trashed": boolean,
}
CostCenter
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": chaîne,
"tags": string[],
"trashed": boolean,
}
Domaine
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": chaîne,
"tags": string[],
"trashed": boolean
}
Job
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": string,
"fileName": chaîne,
"groupCount": number,
"innerId": "1",
"languagePair": string,
"lastModified": Date,
"localePair": string,
"sourceLanguage": chaîne,
"sourceLocale": string,
"tags": string[],
"targetLanguage": chaîne,
"targetLocale": string",
"taskId": string,
"trashed": boolean,
"trashedBy": <User>,
"uid": string
}
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": string,
"tags": [],
"uid": string,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": string,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": chaîne,
"tags": string[],
"type": string,
}
NetRateScheme
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": string,
"name": chaîne,
"tags": string[],
}
PriceList
{
"id": string,
"createdBy": <User>,
"currency": chaîne,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": chaîne,
"tags": string[],
"trashed": boolean,
"unit": chaîne
}
Projet
{
"id": string,
"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": chaîne,
"note": chaîne,
"owner": <User>,
"sourceLanguage": chaîne,
"sourceLocale": string,
"status": string,
"subDomain": <SubDomain>,
"tags": string[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": boolean,
"trashedBy": <User>,
"uid": string,
"vendor": <Vendor>
}
Quote
{
"id": string,
"createdBy: <utilisateur>,
"currency": chaîne,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": chaîne,
"status": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"unit": chaîne
}
Service
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": chaîne,
"publicName": chaîne,
"tags": string[],
"trashed": boolean,
"type": string
}
sous-domaine
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": chaîne,
"tags": string[],
"trashed": boolean
}
utilisateur
{
"id": number,
"actif": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"e-mail": chaîne,
"firstName": chaîne,
"fullName": chaîne,
"innerId": number,
"jobTitle": string,
"lastName": chaîne,
"paramètre linguistique": chaîne,
"note": chaîne,
"role": chaîne,
"tags": string[],
"timeZone": string,
"trashed": boolean,
"userName": chaîne
}
Vendor
{
"id": string,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": string[],
"token": string,
"trashed": boolean
}
WorkflowStep
{
"id": string,
"abbreviation": chaîne,
"dateDeleted": Date,
"dateTrashed": Date,
"name": chaîne,
"order": number,
"tags": string[],
"trashed": boolean
}
Index d'analyse
Agrégation de données
"data": {
"children": {
"type": "analysisType"
}
}
Document parent
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Document enfant
{
"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
},
"MT": {
"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
}
}
}
Index API
Agrégation de données
"data": {
"children": {
"type": "apiType"
}
}
Document parent
{
"user": <User>
}
Document enfant
{
"Demande": {
"date": Date,
"host": chaîne,
"ipv4": chaîne,
"ipv6": chaîne,
"location": chaîne,
"method": chaîne
},
"Réponse": {
"date": Date,
"duration": number,
"statut": number
},
"API": {
"action": chaîne,
"asynch": boolean,
"type": string,
"uri": chaîne,
"ver": chaîne
}
}
Indice des coûts
Agrégation de données
"data": {
"children": {
"type": "costsType"
}
}
Document parent
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Document enfant
{
"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,
"MT": {
"match0": number,
"match100": number,
"match101": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"total": number
}
}
jobPart Index
Agrégation de données
"data": {
"children": {
"type": "jobPartType"
}
}
document parent
{
\"automationWidget\": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
document enfant
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
\"comptes\": {
"chars": {
"total": number,
\"confirmé\": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": nombre,
"notCompleted": number
},
"groups": {
"total": nombre
},
"segments": {
"total": number,
\"confirmé\": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": nombre,
"notCompleted": number,
"mt": {
"postEdited": number,
"relevant": nombre,
"notRelevant": nombre
},
"qa": {
"checked": nombre,
"notChecked": number
}
},
"words": {
"total": number,
\"confirmé\": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": nombre,
"notCompleted": number
},
"qa": {
"warnings": nombre,
"ignoredWarnings": number,
"notIgnoredWarnings": nombre
}
}
}
-
Les requêtes HTTP sont exécutées dans Postman.
-
Connectez-vous via un profil PM ou administrateur, et obtenez un jeton de connexion en utilisant une API de connexion.
-
POST requests to
api/v3/analytics/jobPart?token=<your_login_token>
Nombre total de tâches
Requête
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Réponse
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
Sous le champ aggregations, l'agrégation data a répondu avec 14 417 documents correspondants affichés dans le champ doc_count.
Nombre total de mots source
Requête
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Réponse
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Nombre total de mots source divisé par langue cible
Requête
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Réponse
{
"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
}
}
}
L'entité buckets est affichée dans la réponse. Lorsque le module analytique est invité à diviser les données par catégorie, le résultat est représenté sous forme de liste de buckets. Chaque bucket contient une clé qui définit les données représentées par ce bucket (dans ce cas, une langue cible) et une valeur (autres agrégations) spécifique à cette partie du jeu de données.
Nombre total de tâches divisé par statut du projet
Requête
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Réponse
{
"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
},
"clé": "COMPLETED"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ASSIGNED"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Le module analytique a reçu l'instruction de diviser les données par statut du projet avant l'agrégation des données.
Nombre total de tâches issues de nouveaux projets
Requête
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Réponse
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
Le champ filtre est utilisé dans la requête. Cela permet de restreindre les données avant les agrégations suivantes.