Datastore, který provádí agregace dotazů, je postaven na Elasticsearch (aktuálně verze 1.7.x). Elasticsearch poskytuje vyhledávání v reálném čase a schopnosti agregace, přičemž Analytics API tvoří tenkou, bezpečnostně vylepšenou vrstvu nad tímto systémem. Jazyk dotazů a agregací Elasticsearch se používá v příkladech.
-
Jazyk použitý v poli filtrovat dotazu JSON je popsán v dokumentaci Elasticsearch Query DSL.
-
Jazyk použitý v poli agregace dotazu JSON je plně popsán v dokumentaci Elasticsearch Aggregations.
Indexy
Různé typy dat žijí v různých indexech. Například, data zakázka žijí v indexu jobPart, a data náklady žijí v indexu náklady. Požadovaná data mohou být specifikována uvedením indexu v URL koncovém bodu API agregace.
Dokumenty rodič-dítě
Části informací o zakázce žijí ve dvou různých dokumentech v databázi Elasticsearch. Tyto dokumenty jsou ve vztahu rodič-dítě. Například, informace o projektu zakázky žijí v rodičovském dokumentu, zatímco informace o samotné zakázce žijí v dokumentu dítěte. V závislosti na požadovaných informacích jsou agregace buď před agregací dat rodič-dítě, nebo po ní, ale agregace dat by měla být přítomna ve všech dotazech.
Společná data
Analýza
{
"id": řetězec,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"type": string
}
Úkol
{
"name": string,
"linguist": <User>,
"vendor": <Vendor>
}
Portál zadavatele
{
"id": řetězec,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"urlId": řetězec
}
Zákazník
{
"id": řetězec,
"name": řetězec
}
Klient
{
"id": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": řetězec,
"name": string,
"tags": string[],
"trashed": boolean,
}
Nákladové středisko
{
"id": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
}
Doména
{
"id": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
Job
{
"id": řetězec,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": string,
"fileName": string,
"groupCount": číslo,
"innerId": "1",
"languagePair": řetězec,
"lastModified": Date,
"localePair": string,
"sourceLanguage": string,
"sourceLocale": string,
"tags": string[],
"targetLanguage": string,
"targetLocale": string",
"taskId": řetězec,
"trashed": boolean,
"trashedBy": <User>,
"uid": řetězec
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"endIndex": number,
"groupCount": číslo,
"innerId": string,
"lastModified": Date,
"úroveň": číslo,
"status": string,
"tags": [],
"uid": řetězec,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": řetězec,
"deleted": boolean,
"výchozí_: boolean,
"includeTags": boolean,
"name": string,
"tags": string[],
"type": string,
}
NetRateScheme
{
"id": řetězec,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": řetězec,
"name": string,
"tags": string[],
}
Ceník
{
"id": řetězec,
"createdBy": <User>,
"měna": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"jednotka": řetězec
}
Projekt
{
"id": řetězec,
"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": string,
"note": string,
"owner": <User>,
"sourceLanguage": string,
"sourceLocale": string,
"status": string,
"subDomain": <SubDomain>,
"tags": string[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": boolean,
"trashedBy": <User>,
"uid": řetězec,
"vendor": <Vendor>
}
cenová nabídka
{
"id": řetězec,
"createdBy: <uživatel>",
"měna": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": string,
"status": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"jednotka": řetězec
}
služba
{
"id": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"publicName": string,
"tags": string[],
"trashed": boolean,
"type": string
}
SubDomain
{
"id": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
uživatel
{
"id": číslo,
"active": boolean,
"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": řetězec
}
dodavatel
{
"id": řetězec,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": string[],
"token": string,
"trashed": boolean
}
WorkflowStep
{
"id": řetězec,
"abbreviation": string,
"dateDeleted": Date,
"dateTrashed": Date,
"name": string,
"order": číslo,
"tags": string[],
"trashed": boolean
}
Index analýzy
Agregace dat
"data": {
"children": {
"type": "analysisType"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Vedlejší dokument
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": number,
"data": {
"mt": {
"match0": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match100": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match50": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match75": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match85": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match95": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
}
},
"repetitions": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"tm": {
"match0": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match100": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match101": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match50": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match75": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match85": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
},
"match95": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
}
},
"total": {
"characters": number,
"pages": number,
"percent": číslo,
"segments": číslo,
"words": číslo
}
}
}
API Index
Agregace dat
"data": {
"children": {
"type": "apiType"
}
}
Hlavní dokument
{
"user": <User>
}
Vedlejší dokument
{
"request": {
"date": Date,
"host": řetězec,
"ipv4": string,
"ipv6": string,
"location": string,
"method": řetězec
},
"response": {
"date": Date,
"duration": číslo,
"status": číslo
},
"api": {
"action": string,
"asynch": boolean,
"type": string,
"uri": string,
"ver": řetězec
}
}
Index nákladů
Agregace dat
"data": {
"children": {
"type": "costsType"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Vedlejší dokument
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"priority": number,
"data": {
"mt": {
"match0": number,
"match100": number,
"match50": číslo,
"match75": number,
"match85": number,
"match95": číslo
},
"repetitions": číslo,
"tm": {
"match0": number,
"match100": number,
"match101": number,
"match50": číslo,
"match75": number,
"match85": number,
"match95": číslo
},
"celkem": číslo
}
}
indexPráce
Agregace dat
"data": {
"children": {
"type": "jobPartType"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Vedlejší dokument
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"počty": {
"chars": {
"celkem": číslo,
"potvrzeno": číslo,
"nepotvrzeno": číslo,
"zamknuto": číslo,
"nezamknuto": číslo,
"potvrzenoAZamknuto": číslo,
"nepotvrzenoAZamknuto": číslo,
"dokončeno": číslo,
"nedokončeno": číslo,
},
"groups": {
"celkem": číslo
},
"segments": {
"celkem": číslo,
"potvrzeno": číslo,
"nepotvrzeno": číslo,
"zamknuto": číslo,
"nezamknuto": číslo,
"potvrzenoAZamknuto": číslo,
"nepotvrzenoAZamknuto": číslo,
"dokončeno": číslo,
"neDokončeno": číslo,
"mt": {
"postEdited": number,
"relevantní": číslo,
"nerelevantní": číslo
},
"qa": {
"zkontrolováno": číslo,
"nezkontrolováno": číslo
}
},
"words": {
"celkem": číslo,
"potvrzeno": číslo,
"nepotvrzeno": číslo,
"zamknuto": číslo,
"nezamknuto": číslo,
"potvrzenoAZamknuto": číslo,
"nepotvrzenoAZamknuto": číslo,
"dokončeno": číslo,
"nedokončeno": číslo,
},
"qa": {
"varování": číslo,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP požadavky jsou prováděny v Postmanu.
-
Přihlaste se přes profil PM nebo správce a získejte přihlašovací token pomocí přihlašovacího API.
-
POST požadavky na
api/v3/analytics/jobPart?token=<váš_přihlašovací_token>
Celkový počet úloh
Dotaz
{
"agregace": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"data": {
"doc_count": 14417
}
}
}
Pod polem agregace odpověděla agregace data s 14 417 odpovídajícími dokumenty zobrazenými v poli doc_count.
Celkový počet zdrojových slov
Dotaz
{
"agregace": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Celkový počet zdrojových slov dělený cílovým jazykem
Dotaz
{
"agregace": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"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
}
}
}
Entita buckets je zobrazena v odpovědi. Když je modulu analytiky požádáno, aby rozdělil data podle nějaké kategorie, výsledek je reprezentován jako seznam kbelíků. Každý kbelík obsahuje klíč, který definuje, jaká data tento kbelík představuje (v tomto případě cílový jazyk) a hodnotu (další agregace) specifickou pouze pro tuto část datové sady.
Celkový počet pracovních míst dělený stavem projektu
Dotaz
{
"agregace": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"key": "NOVÝ"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"key": "DOKONČENO"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "PŘIDĚLENO"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Modul analytiky byl instruován, aby rozdělil data podle stavu projektu před data agregací.
Celkový počet pracovních míst z nových projektů
Dotaz
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"agregace": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 326
},
"agregace": {
"data": {
"doc_count": 14318
}
}
}
Pole filter se používá v dotazu. To zúží data před následujícími agregacemi.