Datové úložiště, ve kterém běží agregační dotazy, je postaveno na Elasticsearch (aktuálně verze 1.7.X). Elasticsearch poskytuje vyhledávání v reálném čase a agregační schopnosti, přičemž API pro analytiku tvoří tenkou, zabezpečenou vrstvu nad ním. V příkladech je použit jazyk pro dotazy a agregace Elasticsearch.
-
Jazyk použitý v poli filtrovat v JSON dotazu je popsán v dokumentaci Elasticsearch Query DSL.
-
Jazyk použitý v poli agregace v JSON dotazu je plně popsán v dokumentaci Elasticsearch Aggregations.
Indexy
Různé typy dat jsou uloženy v různých indexech. Například data zakázka jsou uložena v indexu jobPart a data náklady jsou uložena v indexu costs. Požadovaná data lze specifikovat určením indexu v URL koncového bodu API pro dotazy.
Hlavní-vedlejší dokumenty
Části informací o zakázce jsou uloženy ve dvou různých dokumentech v databázi Elasticsearch. Tyto dokumenty jsou ve vztahu hlavní-vedlejší. Například informace o projektu zakázky jsou uloženy v hlavním dokumentu, zatímco informace o samotné zakázce jsou uloženy ve vedlejším dokumentu. V závislosti na požadovaných informacích jsou agregace buď před agregací hlavní-vedlejší, nebo po ní, ale samotná 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
}
Přiřazení
{
"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,
}
CostCenter"
{
"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": number,
"innerId": "1",
"languagePair": řetězec,
"lastModified": Date,
"localePair": string,
"sourceLanguage": string,
"sourceLocale": string,
"tags": string[],
"targetLanguage": string,
"targetLocale": string",
"taskId": ID,
"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": number,
"innerId": string,
"lastModified": Date,
"level": number,
"status": string,
"tags": [],
"uid": řetězec,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": řetězec,
"deleted": boolean,
"default_: 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>,
"currency": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"unit": ř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>,
"currency": řetězec,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": string,
"status": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"unit": ř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": ID,
"active": aktivní,
"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": objednávka,
"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": 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
}
}
}
Index API
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": number,
"status": number
},
"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": number,
"match75": number,
"match85": number,
"match95": number
},
"repetitions": number,
"tm": {
"match0": number,
"match100": number,
"match101": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"total": number
}
}
Index části úlohy
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": number,
"potvrzeno": number,
"nepotvrzeno": number,
"zamknuto": number,
"nezamknuto": number,
"potvrzenoAzamknuto": number,
"nepotvrzenoAzamknuto": number,
"dokončeno": number,
"nedokončeno": number
},
"groups": {
"celkem": number
},
"segments": {
"celkem": number,
"potvrzeno": number,
"nepotvrzeno": number,
"zamknuto": number,
"nezamknuto": number,
"potvrzenoAzamknuto": number,
"nepotvrzenoAzamknuto": number,
"dokončeno": number,
"notCompleted": number,
"MT": {
"postEdited": number,
"relevant": number,
"notRelevant": number
},
"QA": {
"checked": number,
"notChecked": number
}
},
"words": {
"celkem": number,
"potvrzeno": number,
"nepotvrzeno": number,
"zamknuto": number,
"nezamknuto": number,
"potvrzenoAzamknuto": number,
"nepotvrzenoAzamknuto": number,
"dokončeno": number,
"nedokončeno": number
},
"QA": {
"warnings": number,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP požadavky se spouštějí v Postmanu.
-
Přihlaste se prostřednictvím profilu PM nebo správce a získejte přihlašovací token pomocí přihlašovacího API.
-
POST požadavky na
api/v3/analytika/jobPart?token=<your_login_token>
Celkový počet úloh
dotaz
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
V poli aggregations odpověděla agregace data 14 417 odpovídajícími dokumenty zobrazenými v poli doc_count.
Celkový počet slov zdroj
dotaz
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Celkový počet slov zdroj rozdělený podle cílový jazyk
dotaz
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Odpověď
{
"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
}
}
}
Entita buckets je zobrazena v odpovědi. Když je modul analytika požádán o rozdělit data podle určité kategorie, výsledek je reprezentován jako seznam buckets. Každý bucket obsahuje klíč, který definuje, jaká data tento bucket reprezentuje (v tomto případě cílový jazyk) a hodnotu (další agregace) specifickou pouze pro tuto část datové sady.
Celkový počet úloh rozdělený podle stav projektů
dotaz
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"aggregations": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"klíč": "NEW"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"klíč": "COMPLETED"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"klíč": "ASSIGNED"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Modul analytika byl instruován, aby data před agregací data rozdělil podle stav projekt.
Celkový počet zakázek z nových projektů
dotaz
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
Pole filtrovat se používá v dotaz. Toto zúží data před následujícími agregacemi.