API de Phrase TMS

Agrégations d'analytique (TMS)

Le contenu est traduit de l’anglais par Phrase Language AI.

Le magasin de données exécutant des requêtes d'agrégation est construit sur Elasticsearch (actuellement version 1.7.x). Elasticsearch fournit des recherches en temps réel et des capacités d'agrégation, avec l'API d'analytique formant une couche mince et améliorée en matière de sécurité par-dessus. Le langage de requête et d'agrégation d'Elasticsearch est utilisé dans les exemples.

  • Le langage utilisé dans le champ filtre du JSON de requête est décrit dans la documentation Elasticsearch Query DSL.

  • Le langage utilisé dans le champ agrégations du JSON de requête est entièrement décrit dans la documentation Elasticsearch Aggregations.

Indexes

Différents types de données résident dans différents index. Par exemple, les données tâche résident dans l'index jobPart, et les données coûts 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 d'agrégation.

Documents Parent-Enfant

Des parties de l'information concernant une tâche résident dans deux documents différents dans la base de données Elasticsearch. Ces documents sont dans une relation parent-enfant. Par exemple, l'information concernant le projet d'une tâche réside dans le document parent, tandis que l'information concernant la tâche elle-même réside dans le document enfant. En fonction des informations requises, les agrégations se font 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.

Modèles de Données d'Index

Données Communes

Analyse

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "innerId": number,
  "name": chaîne,
  "tags": string[],
  "trashed": booléen,
  "trashedBy": <User>,
  "type": string
}

Attribution

{
  "name": chaîne,
  "linguist": <User>,
  "vendor": <Vendor>
}

Portail de l’envoyeur

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "name": chaîne,
  "tags": string[],
  "trashed": booléen,
  "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": booléen,
}

CostCenter

{
  "id": string,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "name": chaîne,
  "tags": string[],
  "trashed": booléen,
}

Domaine

{
  "id": string,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "name": chaîne,
  "tags": string[],
  "trashed": booléen
}

Job

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "extension": string,
  "fileName": chaîne,
  "groupCount": nombre,
  "innerId": "1",
  "languagePair": string,
  "lastModified": Date,
  "localePair": string,
  "sourceLanguage": chaîne,
  "sourceLocale": string,
  "tags": string[],
  "targetLanguage": chaîne,
  "targetLocale": string",
  "taskId": string,
  "trashed": booléen,
  "trashedBy": <User>,
  "uid": string
}

JobPart

{
  "id": "19",
  "assignedTo": <Assignment>,
  "beginIndex": nombre,
  "buyer": <Buyer>,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDue": Date,
  "endIndex": number,
  "groupCount": nombre,
  "innerId": string,
  "lastModified": Date,
  "level": nombre,
  "status": string,
  "tags": [],
  "uid": string,
  "workflowStep": <WorkflowStep>
}

MtEngine

{
  "id": string,
  "deleted": boolean,
  "default_: booléen,
  "includeTags": booléen,
  "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": booléen,
  "unit": chaîne
}

Project

{
  "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": booléen,
  "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": booléen,
  "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": booléen,
  "type": string
}

sous-domaine

{
  "id": string,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "name": chaîne,
  "tags": string[],
  "trashed": booléen
}

utilisateur

{
  "id": number,
  "actif": booléen,
  "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": booléen,
  "userName": chaîne
}

Vendor

{
  "id": string,
  "candidate": booléen,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "tags": string[],
  "token": string,
  "trashed": booléen
}

WorkflowStep

{
  "id": string,
  "abbreviation": chaîne,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "name": chaîne,
  "order": nombre,
  "tags": string[],
  "trashed": booléen
}

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": nombre,
  "data": {
    "mt": {
      "match0": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match100": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match50": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match75": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match85": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match95": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      }
    },
    "repetitions": {
      "characters": number,
      "pages": nombre,
      "percent": nombre,
      "segments": nombre,
      "words": nombre
    },
    "tm": {
      "match0": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match100": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match101": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match50": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match75": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match85": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      },
      "match95": {
        "characters": number,
        "pages": nombre,
        "percent": nombre,
        "segments": nombre,
        "words": nombre
      }
    },
    "total": {
      "characters": number,
      "pages": nombre,
      "percent": nombre,
      "segments": nombre,
      "words": nombre
    }
  }
}

Index API

Agrégation de données

"data": {
  "children": {
    "type": "apiType"
  }
}

Document parent

{
  "user": <User>
}

Document enfant

{
  "demande": {
    "date": Date,
    "hôte": chaîne,
    "ipv4": chaîne,
    "ipv6": chaîne,
    "emplacement": chaîne,
    "méthode": chaîne
  },
  "réponse": {
    "date": Date,
    "durée": nombre,
    "statut": nombre
  },
  "api": {
    "action": chaîne,
    "asynch": booléen,
    "type": string,
    "uri": chaîne,
    "ver": chaîne
  }
}

Index 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": nombre,
  "data": {
    "mt": {
      "correspondance0": nombre,
      "correspondance100": nombre,
      "correspondance50": nombre,
      "correspondance75": nombre,
      "correspondance85": nombre,
      "correspondance95": nombre,
    },
    "répétitions": nombre,
    "tm": {
      "correspondance0": nombre,
      "correspondance100": nombre,
      "correspondance101": nombre,
      "correspondance50": nombre,
      "correspondance75": nombre,
      "correspondance85": nombre,
      "correspondance95": nombre,
    },
    "total": nombre
  }
}

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é": nombre,
      "notConfirmed": number,
      "locked": number,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "terminé": nombre,
      "notCompleted": number
    },
    "groups": {
      "total": nombre
    },
    "segments": {
      "total": number,
      "confirmé": nombre,
      "notConfirmed": number,
      "locked": number,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "terminé": nombre,
      "notCompleted": number,
      "mt": {
        "postEdited": number,
        "pertinent": nombre,
        "nonPertinent": nombre
      },
      "qa": {
        "vérifié": nombre,
        "notChecked": number
      }
    },
    "words": {
      "total": number,
      "confirmé": nombre,
      "notConfirmed": number,
      "locked": number,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "terminé": nombre,
      "notCompleted": number
    },
    "qa": {
      "avertissements": nombre,
      "ignoredWarnings": number,
      "avertissementsNonIgnorés": nombre
    }
  }
}

Exemples

  • 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=&lt;your_login_token&gt;

Nombre total d'emplois

Requête

{
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "data": {
      "doc_count": 14417
    }
  }
}

Sous le champ agrégations, l'agrégation données a répondu avec 14 417 documents correspondants affichés dans le champ doc_count.

Nombre total de mots sources

Requête

{
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "wordCount": {
          "sum": {
            "field": "data.volume.words"
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "data": {
      "doc_count": 14417,
      "wordCount": {
        "value": 6893067
      }
    }
  }
}

Nombre total de mots sources divisé par la langue cible

Requête

{
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "byTargetLanguage": {
          "terms": {
            "field": "job.targetLanguage",
            "size": 3
          },
          "aggs": {
            "wordCount": {
              "sum": {
                "field": "data.volume.words"
              }
            }
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "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 demandé de diviser les données par une certaine catégorie, le résultat est représenté sous forme d'une liste de seaux. Chaque seau contient une clé qui définit quelles données ce seau représente (dans ce cas, une langue cible) et une valeur (autres agrégations) spécifique juste à cette partie de l'ensemble de données.

Nombre total d'emplois divisés par le statut du projet

Requête

{
  "agrégations": {
    "projectStatus": {
      "terms": {
        "field": "project.status"
      },
      "aggs": {
        "data": {
          "children": {
            "type": "jobPartType"
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "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é": "COMPLÉTÉ"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 4
          },
          "key": "ASSIGNED"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 6
          },
          "key": "DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

Le module analytique a été informé de diviser les données par le statut du projet avant l'agrégation data.

Nombre total d'emplois provenant de nouveaux projets

Requête

{
  "filter": {
    "term": {
      "project.status": "NEW"
    }
  },
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 326
  },
  "agrégations": {
    "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.

Cet article vous a-t-il été utile ?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.