Phrase TMS API

Analytics Aggregations (TMS)

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

Der Datenspeicher, der Aggregations-Querys ausführt, basiert auf Elasticsearch (derzeit Version 1.7.X). Elasticsearch bietet Echtzeitsuchen und Aggregationsfunktionen, wobei die Statistiken-API eine schlanke, sicherheitserweiterte Ebene darüber bildet. In den Beispielen wird die Elasticsearch-Query- und Aggregationssprache verwendet.

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

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

Indizes

Verschiedene Datentypen befinden sich in verschiedenen Indizes. Beispielsweise befinden sich Job-Daten im jobPart-Index und costs-Daten im costs-Index. Erforderliche Daten können durch Angabe des Index in der URL des API-Endpunkts für Aggregationen spezifiziert werden.

Übergeordnetes Element-untergeordnetes Element-Dokumente

Teile der Informationen zu einem Job befinden sich in zwei verschiedenen Dokumenten in der Elasticsearch-DB. Diese Dokumente stehen in einer übergeordnetes Element-untergeordnetes Element-Beziehung. Beispielsweise befinden sich Informationen über das Projekt eines Jobs im übergeordneten Element-Dokument, während sich Informationen über den Job selbst im untergeordneten Element-Dokument befinden. Je nach benötigten Informationen erfolgen Aggregationen entweder vor der übergeordnetes Element-untergeordnetes Element-Datenaggregation oder danach, aber die Datenaggregation selbst sollte in allen Querys vorhanden sein.

Index-Datenmodelle

Allgemeine Daten

Analyse

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

Zuweisung

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

Einreicher-Portal

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

Auftraggeber

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

Kunde

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

CostCenter

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

Fachbereich

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

Job

{
  "id": Zeichenfolge,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "extension": Zeichenfolge,
  "fileName": Zeichenfolge,
  "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": Zeichenfolge
}

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": Zeichenfolge,
  "tags": [],
  "uid": Zeichenfolge,
  "workflowStep": <WorkflowStep>
}

MtEngine

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

NetRateScheme

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

PriceList

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

Projekt

{
  "id": Zeichenfolge,
  "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": Zeichenfolge,
  "note": Zeichenfolge,
  "owner": <User>,
  "sourceLanguage": string,
  "sourceLocale": string,
  "status": Zeichenfolge,
  "subDomain": <SubDomain>,
  "tags": string[],
  "targetLanguages": string[],
  "targetLocales": string[],
  "trashed": boolean,
  "trashedBy": <User>,
  "uid": Zeichenfolge,
  "vendor": <Vendor>
}

Kostenvoranschlag

{
  "id": Zeichenfolge,
  "createdBy: <User>,
  "currency": string,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "innerId": string,
  "name": Zeichenfolge,
  "status": Zeichenfolge,
  "tags": string[],
  "trashed": boolean,
  "trashedBy": <User>,
  "unit": Zeichenfolge
}

Dienstleistung

{
  "id": Zeichenfolge,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": boolean,
  "name": Zeichenfolge,
  "publicName": string,
  "tags": string[],
  "trashed": boolean,
  "type": Zeichenfolge
}

Teilbereich

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

User

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

Auftragnehmer

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

WorkflowStep

{
  "id": Zeichenfolge,
  "abbreviation": Zeichenfolge,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "name": Zeichenfolge,
  "Reihenfolge": number,
  "tags": string[],
  "trashed": boolean
}

Analyse-Index

Daten-Aggregation

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

übergeordnetes Element Dokument

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

untergeordnetes Element Dokument

{
  "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
    },
    "TM": {
      "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
    }
  }
}

API-Index

Daten-Aggregation

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

übergeordnetes Element Dokument

{
  "user": <User>
}

untergeordnetes Element Dokument

{
  "request": {
    "date": Date,
    "host": Zeichenfolge,
    "ipv4": Zeichenfolge,
    "ipv6": Zeichenfolge,
    "location": Zeichenfolge,
    "method": Zeichenfolge
  },
  "Antwort": {
    "date": Date,
    "duration": number,
    "Status": number
  },
  "API": {
    "action": Zeichenfolge,
    "asynch": boolean,
    "type": Zeichenfolge,
    "uri": Zeichenfolge,
    "ver": Zeichenfolge
  }
}

Kostenindex

Daten-Aggregation

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

übergeordnetes Element Dokument

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

untergeordnetes Element Dokument

{
  "analysis": <Analysis>,
  "Job": <Job>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "quote": <Quote>,
  "workflowStep": <WorkflowStep>,
  
  "priority": number,
  "data": {
    "MT": {
      "match0": number,
      "match100": number,
      "match50": Zahl,
      "match75": Zahl,
      "match85": Zahl,
      "match95": Zahl
    },
    "repetitions": Zahl,
    "TM": {
      "match0": number,
      "match100": number,
      "match101": Zahl,
      "match50": Zahl,
      "match75": Zahl,
      "match85": Zahl,
      "match95": Zahl
    },
    "total": Zahl
  }
}

Job-Teil-Index

Datenaggregation

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

übergeordnetes Element Dokument

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

untergeordnetes Element Dokument

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

  \"data\": {
    \"counts\": {
      "chars": {
      \"total\": Nummer,
      \"confirmed\": Nummer,
      \"notConfirmed\": Nummer,
      \"locked\": Nummer,
      \"notLocked\": Nummer,
      "confirmedAndLocked": number,
      \"notConfirmedAndLocked\": Nummer,
      \"completed\": Nummer,
      \"notCompleted\": Nummer
    },
    "groups": {
      \"total\": Nummer
    },
    "segments": {
      \"total\": Nummer,
      \"confirmed\": Nummer,
      \"notConfirmed\": Nummer,
      \"locked\": Nummer,
      \"notLocked\": Nummer,
      "confirmedAndLocked": number,
      \"notConfirmedAndLocked\": Nummer,
      \"completed\": Nummer,
      "notCompleted": number,
      "MT": {
        "postEdited": number,
        "relevant": number,
        "notRelevant": number
      },
      "qa": {
        "checked": number,
        "notChecked": number
      }
    },
    "words": {
      \"total\": Nummer,
      \"confirmed\": Nummer,
      \"notConfirmed\": Nummer,
      \"locked\": Nummer,
      \"notLocked\": Nummer,
      "confirmedAndLocked": number,
      \"notConfirmedAndLocked\": Nummer,
      \"completed\": Nummer,
      \"notCompleted\": Nummer
    },
    "qa": {
      "warnings": number,
      "ignoredWarnings": number,
      "notIgnoredWarnings": number
    }
  }
}

Beispiele

  • HTTP-Anfragen werden in Postman ausgeführt.

  • Melden Sie sich über ein PM- oder Admin-Profil an und erhalten Sie ein Anmelde-Token über eine Login-API.

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

Gesamtzahl der Jobs

Query

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

Antwort

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

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

Gesamtzahl der Wörter der Ausgangssprache

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

Gesamtzahl der Wörter der Ausgangssprache aufgeteilt nach Sprache

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 Statistiken-Modul aufgefordert wird, die Daten nach einer 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 Sprache), und einen Wert (weitere Aggregationen), der spezifisch für diesen Teil des Datensatzes ist.

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

Das Statistiken-Modul wurde angewiesen, die Daten vor der Daten-Aggregation nach Projekt Status aufzuteilen.

Gesamtzahl 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 Filtern-Feld wird in der Query verwendet. Dies schränkt die Daten vor den nachfolgenden 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.