API de Phrase TMS

Analytics Aggregations (TMS)

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

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.

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.

Modèles de données index

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
    }
  }
}

Exemples

  • 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.

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.