La banque de données exécutant des requêtes d'agrégation repose sur Elasticsearch (actuellement version 1.7.x). Elasticsearch offre des fonctionnalités de recherche et d’agrégation en temps réel grâce à l’API analytique qui constitue une couche mince à sécurité améliorée. 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 DSL Requête Elasticsearch .
-
La langue utilisée dans le champ des agrégations de la requête JSON est entièrement décrite dans la documentation des agrégations Elasticsearch.
Index
Différents types de données vivent dans différents index. Par exemple, les données sur les tâches figurent dans l ' indice JobPart et coûtent la vie aux données dans l ' indice des coûts. Les données requises peuvent être spécifiées en spécifiant l'index dans l'URL du point de terminaison API d'agrégation.
Documents parents-enfants
Des parties des informations sur une tâche vivent dans deux documents différents dans la DB Elasticsearch. Ces documents sont dans une relation parent à enfant. Par exemple, les informations sur le projet d'une tâche vivent dans le document parent, tandis que les informations sur la tâche elle-même vivent dans le document enfant. Selon les informations requises, les agrégations sont soit avant l'agrégation enfantnnées, soit après, mais l'agrégation des données elle-même devrait ê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": string, "tags": string[], "trashed": boolean, "trashedBy": <User>, "type": string }
Assignation
{ "name": string, "linguist": <User>, "vendor": <Vendor> }
Portail de l’envoyeur
{ "id": string, "createdBy": <User>, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, "urlId": string }
Acheteur
{ "id": string, "name": string }
Client
{ "id": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "externalId": string, "name": string, "tags": string[], "trashed": boolean, }
CostCenter
{ "id": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, }
Domaine
{ "id": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean }
Tâche
{ "id": string, "createdBy": <User>, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, « extension » : chaîne , "fileName": string, "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": 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_: booléen, "includeTags": booléen, "name": string, "tags": string[], "type": string, }
NetRateScheme
{ "id": string, "createdBy": <User>, "dateCreated": Date, "dateDeleted": Date, "default_": boolean, "deleted": boolean, "externalId": string, "name": string, "tags": string[], }
PriceList
{ "id": string, "createdBy": <User>, "currency": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "default_": boolean, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean, "unit": string }
Projet
{ "id": string, "buyer": <Buyer>, "client": <Client>, "costCenter": <CostCenter>, "createdBy": <User>, "dateCreated": Date, "dateDeleted": Date, "dateDue": Date, "dateTrashed": Date, "deleted": boolean, « domaine » : <Domain>, "innerId": number, "languagePairs": string[], "localePairs": string[], "mtEngine": <MtEngine>, "name": string, "note": string, « Responsable » : <Utilisateur>, "sourceLanguage": string, "sourceLocale": string, "status": string, « sous-domaine » : <sous-domaine>, "tags": string[], "targetLanguages": string[], "targetLocales": string[], "trashed": boolean, "trashedBy": <User>, "uid": string, "vendor": <Vendor> }
Devis
{ "id": string, "createdBy: <Utilisateur>, "currency": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "innerId": string, "name": string, "status": string, "tags": string[], "trashed": boolean, "trashedBy": <User>, "unit": string }
Service
{ "id": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "name": string, "publicName": string, "tags": string[], "trashed": boolean, "type": string }
Sous-domaine
{ "id": string, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "name": string, "tags": string[], "trashed": boolean }
Utilisateur
{ «Identifiant» : numéro, « actif » : booléen, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "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 }
Prestataire
{ "id": string, « candidat » : booléen, "dateCreated": Date, "dateDeleted": Date, "dateTrashed": Date, "deleted": boolean, "tags": string[], "token": string, "trashed": boolean }
Étape de flux
{ "id": string, « abréviation » : chaîne , "dateDeleted": Date, "dateTrashed": Date, "name": string, "order": number, "tags": string[], "trashed": boolean }
Indice 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": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match100": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match50": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match75": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match85": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match95": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre } }, "repetitions": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "tm": { "match0": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match100": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match101": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match50": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match75": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match85": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre }, "match95": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre } }, "total": { « caractères » : nombre, "pages": number, "percent": number, "segments": number, "mots": nombre } } }
API Index
Agrégation de données
"data": { "children": { "type": "apiType" } }
Document parent
{ "user": <User> }
Document enfant
{ "request": { "date": Date, "host": string, "ipv4": string, "ipv6": string, "location": string, "method": string }, "response": { "date": Date, "durée": numéro, "statut": numéro }, "api": { "action": string, « asynchrone » : booléen, "type": string, "uri": string, "ver": string } }
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": numéro, "match100": numéro, « correspondance 50 » : numéro, "match75": numéro, « correspondance 85 » : numéro, "match95": number }, « répétitions » : nombre, "tm": { "match0": numéro, "match100": numéro, "match101": numéro, « correspondance 50 » : numéro, "match75": numéro, « correspondance 85 » : numéro, "match95": number }, "total": number } }
Index jobPart
Agrégation de données
"data": { "children": { "type": "jobPartType" } }
Document parent
{ "automationWidget": <AutomationWidget>, "project": <Project>, "service": <Service> }
Document enfant
{ "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, « pertinent » : numéro, "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 } } }
-
Les demandes HTTP sont exécutées dans Postman.
-
Connectez-vous via un profil PM ou Administrateur, et obtenez un jeton de connexion à l'aide d'une API de connexion.
-
Les demandes de POST à
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 } } }
Dans le champ des agrégations, l'agrégation des données a donné lieu à 14 417 documents correspondants indiqués dans le champ doc_count.
Nombre total de mots sources
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 sources divisés 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 indiquée dans la réponse. Lorsqu'il est demandé au module Analytics de diviser les données par une catégorie, le résultat est représenté sous forme de liste de compartiments. Chaque compartiment contient une clé qui définit quelles données ce compartiment représente (en l'occurrence une langue cible) et une valeur (les autres agrégations) propre juste à cette partie du jeu de données.
Nombre total de tâches réparties par projet Statut
Requête
{ "aggregations": { "projectStatus": { "terms": { "field": "project.status" }, "aggs": { "data": { "children": { "type": "jobPartType" } } } } } }
Répondre
{ "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": « NOUVEAU » }, { "doc_count": 31, "data": { "doc_count": 89 }, "key": « TERMINÉ » }, { "doc_count": 1, "data": { "doc_count": 4 }, "key": « ASSIGNÉ » }, { "doc_count": 1, "data": { "doc_count": 6 }, "key": "DECLINED_BY_VENDOR" } ] } } }
Il a été dit au module analytique de diviser les données par statut de projet avant l ' agrégation des données.
Nombre total de tâches issues de nouveaux projets
Requête
{ "filter": { "term": { "project.status": « NOUVEAU » } }, "aggregations": { "data": { "children": { "type": "jobPartType" } } } }
Répondre
{ "hits": { "total": 326 }, "aggregations": { "data": { "doc_count": 14318 } } }
La requête utilise le champ filtre . Cela permet d’affiner les données avant de suivre les agrégations.