Phrase TMS API

Analytics Aggregations (TMS)

Inhalte werden von Phrase Language AI maschinell aus dem Englischen übersetzt.

Der Datenspeicher, der Aggregationsabfragen ausführt, basiert auf Elasticsearch (derzeit Version 1.7.x). Elasticsearch bietet Echtzeitsuchen und Aggregationsmöglichkeiten, wobei die Analytics API eine schlanke, sicherheitsverbesserte Schicht darüber bildet. Die Abfrage- und Aggregationssprache von Elasticsearch wird in den Beispielen verwendet.

  • Die Sprache, die im filter Feld des Abfrage-JSON verwendet wird, wird in der Elasticsearch Query DSL Dokumentation beschrieben.

  • Die Sprache, die im aggregations Feld des Abfrage-JSON verwendet wird, wird vollständig in der Elasticsearch Aggregations Dokumentation beschrieben.

Indizes

Verschiedene Datentypen befinden sich in verschiedenen Indizes. Zum Beispiel befinden sich job Daten im jobPart Index, und costs Daten befinden sich im costs Index. Erforderliche Daten können angegeben werden, indem der Index in der Aggregations-API-Endpunkt-URL spezifiziert wird.

Übergeordnetes Element – untergeordnetes Element Dokumente

Teile der Informationen zu einem Job befinden sich in zwei verschiedenen Dokumenten in der Elasticsearch-Datenbank. Diese Dokumente stehen in einer übergeordnetes Element–untergeordnetes Element Beziehung. Beispielsweise befinden sich Informationen zum Projekt eines Jobs im übergeordneten Dokument, während Informationen zum Job selbst im untergeordneten Dokument gespeichert sind. Je nach erforderlichen Informationen befinden sich die Aggregationen entweder vor der Daten-übergeordnetes Element–untergeordnetes Element-Aggregation oder danach, aber die Datenaggregation selbst sollte in allen Abfragen enthalten sein.

Indexdatenmodelle

Gemeinsame Daten

Analyse

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "innerId": number,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean,
  "trashedBy": <User>,
  "type": Zeichenfolge
}

Zuweisung

{
  "name": Zeichenfolge,
  "linguist": <User>,
  "vendor": <Auftragnehmer>
}

Submitter Portal

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean,
  "urlId": string
}

Auftraggeber

{
  "id": Zeichenfolge,
  "name": Zeichenfolge
}

Kunde

{
  "id": Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "externalId": Zeichenfolge,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean,
}

CostCenter

{
  "id": Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean,
}

Fachbereich

{
  "id": Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean
}

Job

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "extension": Zeichenfolge,
  "fileName": Zeichenfolge,
  "groupCount": number,
  "innerId": "1",
  "languagePair": Zeichenfolge,
  "lastModified": Datum,
  "localePair": Zeichenfolge,
  "sourceLanguage": Zeichenfolge,
  "sourceLocale": Zeichenfolge,
  "tags": Zeichenfolge[],
  "targetLanguage": Zeichenfolge,
  "targetLocale": Zeichenfolge,
  "taskId": Zeichenfolge,
  "trashed": boolean,
  "trashedBy": <User>,
  "uid": Zeichenfolge
}

JobPart

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

MtEngine

{
  "id": Zeichenfolge,
  "gelöscht": boolean,
  "default_: boolean,
  "includeTags": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "type": Zeichenfolge,
}

NetRateScheme

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "default_": boolean,
  "gelöscht": boolean,
  "externalId": Zeichenfolge,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
}

Preisliste

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "currency": Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "default_": boolean,
  "deleted": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "trashed": boolean,
  "unit": Zeichenfolge
}

Projekt

{
  "id": Zeichenfolge,
  "buyer": <Buyer>,
  "client": <Client>,
  "costCenter": <CostCenter>,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateDue": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "domain": <Domain>,
  "innerId": number,
  "languagePairs": string[],
  "localePairs": string[],
  "mtEngine": <MtEngine>,
  "name": string,
  "note": string,
  "owner": <User>,
  "sourceLanguage": string,
  "sourceLocale": Zeichenfolge,
  "status": Status,
  "subDomain": <SubDomain>,
  "tags": Zeichenfolge[],
  "targetLanguages": Zeichenfolge[],
  "targetLocales": Zeichenfolge[],
  "trashed": boolean,
  "trashedBy": <User>,
  "uid": Zeichenfolge,
  "vendor": <Vendor>
}

Kostenvoranschlag

{
  "id": Zeichenfolge,
  "createdBy: <User>,
  "currency": Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "innerId": Zeichenfolge,
  "name": Zeichenfolge,
  "status": Zeichenfolge,
  "tags": Tag[],
  "trashed": boolean,
  "trashedBy": <User>,
  "unit": Zeichenfolge
}

Service

{
  "id": ID,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "name": Zeichenfolge,
  "publicName": string,
  "tags": Zeichenfolge[],
  "inPapierkorb": boolean,
  "typ": Zeichenfolge
}

SubDomain

{
  "id": ID,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "name": Zeichenfolge,
  "tags": Zeichenfolge[],
  "inPapierkorb": boolean
}

User

{
  "id": ID,
  "active": boolean,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "gelöscht": boolean,
  "email": Zeichenfolge,
  "firstName": Zeichenfolge,
  "fullName": Zeichenfolge,
  "innerId": number,
  "jobTitle": Zeichenfolge,
  "lastName": Zeichenfolge,
  "locale": Zeichenfolge,
  "note": Zeichenfolge,
  "role": Zeichenfolge,
  "tags": Tag[],
  "timeZone": Zeichenfolge,
  "trashed": boolean,
  "userName": Zeichenfolge
}

Auftragnehmer

{
  "id": Zeichenfolge,
  "candidate": boolean,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "tags": Zeichenfolge[],
  "token": Token,
  "trashed": boolean
}

WorkflowStep

{
  "id": Zeichenfolge,
  "abbreviation": Zeichenfolge,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "name": Zeichenfolge,
  "Reihenfolge": Zahl,
  "tags": Zeichenfolge[],
  "trashed": boolean
}

Analyse-Index

Datenaggregation

"data": {
  "children": {
    "type": "analysisType"
  }
}

Übergeordnetes Dokument

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

Untergeordnetes Dokument

{
  "Analyse": <Analysis>,
  "jobPart": <JobPart>,
  "job": <Job>,
  "netRateScheme": <NetRateScheme>,

  "priorität": Zahl,
  "data": {
    "mt": {
      "Match0": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "segments": Zahl,
        "words": Zahl,
      },
      "Match100": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "segments": Zahl,
        "words": Zahl,
      },
      "Match50": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "segments": Zahl,
        "words": Zahl,
      },
      "Match75": {
        "character": Zahl,
        "seiten": Zahl,
        "percent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match85": {
        "Zeichen": Zahl,
        "Seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match95": {
        "Zeichen": Zahl,
        "Seiten": Zahl,
        "percent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      }
    },
    "Wiederholung": {
      "Zeichen": Zahl,
      "Seiten": Zahl,
      "percent": Zahl,
      "Segment": Zahl,
      "Wörter": Zahl
    },
    "TM": {
      "Match0": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match100": {
        "character": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match101": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match50": {
        "Zeichen": Zahl,
        "seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match75": {
        "Zeichen": Zahl,
        "Seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match85": {
        "Zeichen": Zahl,
        "Seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      },
      "Match95": {
        "Zeichen": Zahl,
        "Seiten": Zahl,
        "prozent": Zahl,
        "Segment": Zahl,
        "Wörter": Zahl
      }
    },
    "total": {
      "Zeichen": Zahl,
      "seiten": Zahl,
      "prozent": Zahl,
      "Segment": Zahl,
      "Wörter": Zahl
    }
  }
}

API-Index

Datenaggregation

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

Übergeordnetes Dokument

{
  "user": <User>
}

Untergeordnetes Dokument

{
  "request": {
    "date": Datum,
    "host": Zeichenfolge,
    "ipv4": Zeichenfolge,
    "ipv6": Zeichenfolge,
    "standort": Zeichenfolge,
    "Methode": Zeichenfolge,
  },
  "Antwort": {
    "date": Datum,
    "Dauer": Zahl,
    "Status": Zahl
  },
  "API": {
    "Aktion": Zeichenfolge,
    "asynch": boolean,
    "type": Zeichenfolge,
    "uri": Zeichenfolge,
    "ver": Zeichenfolge
  }
}

Kostenindex

Datenaggregation

"data": {
  "children": {
    "type": "costsType"
  }
}

Übergeordnetes Dokument

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

Untergeordnetes Dokument

{
  "analysis": <Analyse>,
  "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
    },
    "Wiederholung": number,
    "TM": {
      "Match0": number,
      "Match100": number,
      "Match101": number,
      "Match50": number,
      "Match75": number,
      "Match85": number,
      "Match95": number
    },
    "total": zahl
  }
}

jobPart Index

Datenaggregation

"data": {
  "children": {
    "type": "jobPartType"
  }
}

Übergeordnetes Dokument

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

Untergeordnetes Dokument

{
  "job": <Job>,
  "jobPart": <JobPart>

  "data": {
    "counts": {
      "chars": {
      "total": number,
      "confirmed": number,
      "notConfirmed": number,
      "gesperrt": number,
      "nichtGesperrt": number,
      "bestätigtUndGesperrt": number,
      "nichtBestätigtUndGesperrt": number,
      "abgeschlossen": number,
      "nichtAbgeschlossen": number
    },
    "groups": {
      "total": number
    },
    "Segment": {
      "total": number,
      "confirmed": number,
      "notConfirmed": number,
      "gesperrt": number,
      "notLocked": number,
      "bestätigtUndGesperrt": number,
      "nichtBestätigtUndGesperrt": number,
      "abgeschlossen": number,
      "nichtAbgeschlossen": number,
      "MT": {
        "postEdited": number,
        "relevant": number,
        "notRelevant": number
      },
      "qa": {
        "checked": number,
        "notChecked": number
      }
    },
    "Wörter": {
      "total": number,
      "confirmed": number,
      "notConfirmed": number,
      "gesperrt": number,
      "notLocked": number,
      "bestätigtUndGesperrt": number,
      "nichtBestätigtUndGesperrt": number,
      "abgeschlossen": number,
      "nichtAbgeschlossen": number
    },
    "qa": {
      "warnings": number,
      "ignorierteWarnungen": Zahl,
      "nichtIgnorierteWarnungen": Zahl
    }
  }
}

Beispiele

  • HTTP-Anfragen werden in Postman ausgeführt.

  • Über ein PM- oder Admin-Profil anmelden und ein Login-Token über eine Login-API erhalten.

  • POST-Anfragen an api/v3/analytics/jobPart?token=&lt;your_login_token&gt;

Gesamtanzahl der Jobs

Query

{
  "Aggregationen": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Antwort

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "doc_count": 14417
    }
  }
}

Unter dem aggregations-Feld hat die data-Aggregation mit 14.417 übereinstimmenden Dokumenten geantwortet, die im doc_count-Feld angezeigt werden.

Gesamtanzahl der Ausgangswörter

Query

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

Antwort

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "doc_count": 14417,
      "wordCount": {
        "value": 6893067
      }
    }
  }
}

Gesamtanzahl der Wörter der Ausgangssprache geteilt durch die Zielsprache

Query

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

Antwort

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

Die buckets Entität wird in der Antwort angezeigt. Wenn das Statistiken-Modul aufgefordert wird, die Daten nach einer bestimmten Kategorie aufzuteilen, wird das Ergebnis als Liste von Buckets dargestellt. Jeder Bucket enthält einen Schlüssel, der definiert, welche Daten dieser Bucket repräsentiert (in diesem Fall eine Zielsprache) und einen Wert (andere Aggregationen), der spezifisch nur für diesen Teil des Datensatzes ist.

Gesamtzahl der Jobs, geteilt nach Projektstatus

Query

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

Antwort

{
  "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
          },
          "key": "ABGESCHLOSSEN"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 4
          },
          "key": "ZUGEWIESEN"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 6
          },
          "key": "DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

Das Statistiken-Modul wurde angewiesen, die Daten vor der data Aggregation nach Projektstatus aufzuteilen.

Gesamtzahl der Jobs aus neuen Projekten

Query

{
  "filter": {
    "term": {
      "project.status": "NEW"
    }
  },
  "Aggregationen": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Antwort

{
  "hits": {
    "total": 326
  },
  "aggregations": {
    "data": {
      "doc_count": 14318
    }
  }
}

Das filter Feld wird in der Query verwendet. Dies schränkt die Daten vor den folgenden Aggregationen ein.

War dieser Beitrag hilfreich?

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.