API de Phrase TMS

Agrégations analytique (TMS)

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

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.

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

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

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.