Phrase TMS API

Statistiken (TMS)

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

Die laufenden Aggregationsabfragen im Datenspeicher basieren auf Elasticsearch (derzeit Version 1.7.x). Elasticsearch bietet Echtzeit-Such- und Aggregationsfunktionen. Das API Statistiken bildet eine dünne, sicherheitstechnisch verbesserte Schicht darauf. In den Beispielen wird die Sprache Elasticsearch Query and Aggregation verwendet.

  • Die Sprache, die im Feld der Query JSON gefiltert wird, ist in der Elasticsearch Query DSL-Dokumentation beschrieben.

  • Die im Aggregationsfeld der Query JSON verwendete Sprache ist vollständig in der Dokumentation zu Elasticsearch Aggregations beschrieben.

Indizes

Verschiedene Datentypen leben in verschiedenen Indizes. Jobs leben beispielsweise im jobPart-Index und Kosten leben im Kostenindex. Erforderliche Daten können durch Angabe des Index in der URL des API-Endpunkts angegeben werden.

Dokumente übergeordnetes Element

Teile der Informationen zu einem Job liegen in zwei verschiedenen Dokumenten in der Elasticsearch DB. Diese Dokumente haben ein übergeordnetes Element. So werden zum Beispiel Informationen zum Projekt eines Job im übergeordnetes Element Dokument gespeichert, während Informationen zum Job selbst im untergeordnetes Element Dokument gespeichert werden. Abhängig von den erforderlichen Informationen stehen Aggregationen entweder vor der Aggregation des übergeordneten Elements oder dahinter, aber die Datenaggregation selbst sollte in allen Abfragen vorhanden sein.

Index-Datenmodelle

Gemeinsame Daten

Analysis

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "innerId": Zahl,
  "name": string,
  "tags": string[],
  "trashed": boolean,
  "trashedBy": <User>,
  „Typ“: Zeichenfolge
}

Zuordnung

{
  "name": string,
  "linguist": <User>,
  "vendor": <Vendor>
}

Einreicher-Portal

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

Auftragnehmer*in

{
  "id": string,
  "name": string
}

Kunde

{
  "id": string,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "externalId": string,
  "name": string,
  "tags": string[],
  "trashed": boolean,
}

CostCenter

{
  "id": string,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean,
}

Fachbereich

{
  "id": string,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean
}

Job

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "extension": string,
  "fileName": string,
  „groupCount“: Zahl,
  "innerId": "1",
  "languagePair": string,
  "lastModified": Datum,
  "localePair": string,
  "sourceLanguage": string,
  "sourceLocale": string,
  "tags": string[],
  "targetLanguage": string,
  "targetLocale": string",
  "taskId": string,
  "trashed": boolean,
  "trashedBy": <User>,
  „uid“: Zeichenfolge
}

JobPart

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

MtEngine

{
  "id": string,
  "deleted": boolean,
  "default_: boolean,
  "includeTags": boolean,
  "name": string,
  "tags": string[],
  „Typ“: Zeichenfolge,
}

NetRateScheme

{
  "id": string,
  "createdBy": <User>,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "default_": boolean,
  "deleted": boolean,
  "externalId": string,
  "name": string,
  "tags": string[],
}

PriceList

{
  "id": string,
  "createdBy": <User>,
  „Währung“: Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "default_": boolean,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean,
  „Einheit“: Zeichenfolge
}

Project

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

Angebot

{
  "id": string,
  "createdBy: <User>,
  „Währung“: Zeichenfolge,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "innerId": string,
  "name": string,
  "status": string,
  "tags": string[],
  "trashed": boolean,
  "trashedBy": <User>,
  „Einheit“: Zeichenfolge
}

Service

{
  "id": string,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "name": string,
  "publicName": string,
  "tags": string[],
  "trashed": boolean,
  „Typ“: Zeichenfolge
}

SubDomain

{
  "id": string,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "name": string,
  "tags": string[],
  "trashed": boolean
}

User

{
  "id": Zahl,
  "active": boolean,
  "dateCreated": Datum,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "deleted": boolean,
  "E-Mail": Zeichenfolge,
  "firstName": string,
  "fullName": string,
  "innerId": Zahl,
  "jobTitle": string,
  "lastName": string,
  "locale": string,
  "note": string,
  "role": string,
  "tags": string[],
  "timeZone": string,
  "trashed": boolean,
  "userName": string
}

Auftragnehmer

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

WorkflowStep

{
  "id": string,
  "abbreviation": string,
  "dateDeleted": Datum,
  "dateTrashed": Datum,
  "name": string,
  „Reihenfolge“: Nummer,
  "tags": string[],
  "trashed": boolean
}

Analysis Index

Datenaggregation

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

Dokument übergeordnetes Element

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

Dokument untergeordnetes Element

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

  „Priorität“: Zahl,
  "data": {
    "mt": {
      "match0": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match100": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match50": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match75": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match85": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match95": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      }
    },
    "repetitions": {
      „Zeichen“: Zahl,
      "Seiten": Zahl,
      "Prozent": Zahl,
      "segments": number,
      "Wörter": Zahl
    },
    "tm": {
      "match0": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match100": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match101": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match50": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match75": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match85": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      },
      "match95": {
        „Zeichen“: Zahl,
        "Seiten": Zahl,
        "Prozent": Zahl,
        "segments": number,
        "Wörter": Zahl
      }
    },
    "total": {
      „Zeichen“: Zahl,
      "Seiten": Zahl,
      "Prozent": Zahl,
      "segments": number,
      "Wörter": Zahl
    }
  }
}

API Index

Datenaggregation

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

Dokument übergeordnetes Element

{
  "user": <User>
}

Dokument untergeordnetes Element

{
  "request": {
    "date": Datum,
    "host": string,
    „ipv4“: Zeichenfolge,
    „ipv6“: Zeichenfolge,
    "location": string,
    „Methode“: Zeichenfolge
  },
  "response": {
    "date": Datum,
    „Dauer“: Zahl,
    "status": number
  },
  "api": {
    "action": string,
    "asynch": boolean,
    „Typ“: Zeichenfolge,
    "uri": Zeichenfolge,
    „ver“: Zeichenfolge
  }
}

Kostenindex

Datenaggregation

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

Dokument übergeordnetes Element

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

Dokument untergeordnetes Element

{
  "analysis": <Analysis>,
  "job": <Job>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "quote": <Quote>,
  "workflowStep": <WorkflowStep>,
  
  „Priorität“: Zahl,
  "data": {
    "mt": {
      "match0": Zahl,
      "match100": Zahl,
      "Match50": Zahl,
      "Match75": Zahl,
      "Match85": Zahl,
      "match95": Zahl
    },
    "Wiederholungen": Zahl,
    "tm": {
      "match0": Zahl,
      "match100": Zahl,
      "Match101": Zahl,
      "Match50": Zahl,
      "Match75": Zahl,
      "Match85": Zahl,
      "match95": Zahl
    },
    „insgesamt“: Zahl
  }
}

jobPart Index

Datenaggregation

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

Dokument übergeordnetes Element

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

Dokument untergeordnetes Element

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

  "data": {
    "counts": {
      "chars": {
      „insgesamt“: Zahl,
      „bestätigt“: Zahl,
      „Nicht bestätigt“: Zahl,
      „Gesperrt“: Nummer,
      „notLocked“: Zahl,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      „abgeschlossen“: Zahl,
      „Nicht abgeschlossen“: Nummer
    },
    "groups": {
      „insgesamt“: Zahl
    },
    "segments": {
      „insgesamt“: Zahl,
      „bestätigt“: Zahl,
      „Nicht bestätigt“: Zahl,
      „Gesperrt“: Nummer,
      „notLocked“: Zahl,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      „abgeschlossen“: Zahl,
      „nichtAbgeschlossen“: Zahl,
      "mt": {
        "postEdited": number,
        „relevant“: Zahl,
        "notRelevant": number
      },
      "qa": {
        "geprüft": Zahl,
        „notChecked“: Nummer
      }
    },
    "words": {
      „insgesamt“: Zahl,
      „bestätigt“: Zahl,
      „Nicht bestätigt“: Zahl,
      „Gesperrt“: Nummer,
      „notLocked“: Zahl,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      „abgeschlossen“: Zahl,
      „Nicht abgeschlossen“: Nummer
    },
    "qa": {
      „Warnungen“: Nummer,
      "ignoredWarnings": number,
      "notIgnoredWarnings": number
    }
  }
}

Beispiele

  • HTTP-Anfragen werden in Postman ausgeführt.

  • Melde dich über ein PM oder Admin Profil an und erhalte einen Login Token über eine Login API.

  • POST REQuests an API / v3 / Analytics / jobPart?token=<your_login_token>

Gesamtanzahl der Jobs

Query

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

Antwort

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

Unter dem Feld Aggregationen antwortete die Datenaggregation mit 14.417 passenden Dokumenten, die im Feld doc_count angezeigt wurden.

Gesamtanzahl der Ausgangssprachen

Query

{
  "aggregations": {
    "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 Ausgangssprachen geteilt durch Zielsprache

Query

{
  "aggregations": {
    "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 Analytics Modul aufgefordert wird, die Daten in eine bestimmte Kategorie aufzuteilen, wird das Ergebnis als eine Liste von Buckets dargestellt. Jeder Bucket enthält einen Key, der definiert, welche Daten dieser Bucket repräsentiert (in diesem Fall eine Zielsprache) und einen Wert (andere Aggregationen), der nur für diesen Teil des Datensatzes spezifisch ist.

Gesamtanzahl der Jobs aufgeteilt nach Projekt Status

Query

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

Das Statistik-Modul wurde angewiesen, die Daten vor der Datenaggregation nach Status des Projekts aufzuteilen.

Gesamtanzahl der Jobs aus neuen Projekten

Query

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

Antwort

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

Das Feld filtert wird in der Query verwendet. Dadurch werden die Daten vor der Aggregation eingegrenzt.

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.