Datastore, který provádí agregační dotazy, je postaven 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ž Analytics API tvoří tenkou, bezpečnostně vylepšenou vrstvu nad ním. V příkladech se používá jazyk dotazů a agregací Elasticsearch.
-
Jazyk použitý v poli filtr 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 určením indexu v URL koncového bodu agregačního API.
Dokumenty hlavní-vedlejší
Části informací o zakázce žijí 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 v hlavním dokumentu, zatímco informace o samotné zakázce jsou ve vedlejším dokumentu. V závislosti na požadovaných informacích jsou agregace buď před agregací dat hlavní-vedlejší, nebo po ní, ale samotná agregace dat by měla být přítomna ve všech dotazech.
Běžná data
Analýza
{
"id": řetězec,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"innerId": number,
"name": řetězec,
"tags": řetězec[],
"smazáno": boolean,
"trashedBy": <User>,
"type": řetězec
}
Úkol
{
"name": řetězec,
"linguist": <překladatel>,
"vendor": <dodavatel>
}
Portál zadavatele
{
"id": řetězec,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"smazáno": boolean,
"název": řetězec,
"tagy": řetězec[],
"smazáno": boolean,
"urlId": řetězec
}
Zákazník
{
"id": řetězec,
"název": řetězec
}
Klient
{
"id": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"externíId": řetězec,
"název": řetězec,
"tagy": řetězec[],
"trashed": boolean,
}
CostCenter
{
"id": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"název": řetězec,
"tagy": řetězec[],
"trashed": boolean,
}
Doména
{
"id": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"název": řetězec,
"tagy": řetězec[],
"smazáno": boolean
}
Zakázka
{
"id": řetězec,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"extension": řetězec,
"fileName": řetězec,
"groupCount": číslo,
"innerId": "1",
"languagePair": řetězec,
"lastModified": Datum,
"localePair": řetězec,
"sourceLanguage": řetězec,
"sourceLocale": řetězec,
"tagy": řetězec[],
"targetLanguage": řetězec,
"targetLocale": řetězec,
"taskId": řetězec,
"trashed": boolean,
"trashedBy": <uživatel>,
"uid": řetězec
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": číslo,
"buyer": <Zákazník>,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDue": Datum,
"endIndex": číslo,
"groupCount": číslo,
"innerId": řetězec,
"lastModified": Datum,
"level": číslo,
"status": stav,
"tags": [],
"uid": řetězec,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": řetězec,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"název": řetězec,
"tagy": řetězec[],
"type": řetězec,
}
NetRateScheme
{
"id": řetězec,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDeleted": Datum,
"default_": boolean,
"deleted": boolean,
"externíId": řetězec,
"název": řetězec,
"tagy": řetězec[],
}
PriceList
{
"id": řetězec,
"createdBy": <uživatel>,
"currency": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"default_": boolean,
"deleted": boolean,
"název": řetězec,
"tagy": řetězec[],
"trashed": boolean,
"unit": řetězec
}
Projekt
{
"id": řetězec,
"buyer": <Zákazník>,
"client": <Klient>,
"costCenter": <CostCenter>,
"createdBy": <uživatel>,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateDue": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"domain": <Doména>,
"innerId": number,
"languagePairs": řetězec[],
"localePairs": řetězec[],
"mtEngine": <MtEngine>,
"název": řetězec,
"poznámka": řetězec,
"owner": <vlastník>,
"sourceLanguage": řetězec,
"sourceLocale": řetězec,
"status": stav,
"subDomain": <SubDomain>,
"tags": řetězec[],
"targetLanguages": řetězec[],
"targetLocales": řetězec[],
"trashed": boolean,
"trashedBy": <uživatel>,
"uid": řetězec,
"vendor": <dodavatel>
}
Cenová nabídka
{
"id": řetězec,
"createdBy": <uživatel>,
"currency": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"deleted": boolean,
"innerId": řetězec,
"název": řetězec,
"status": stav,
"tagy": řetězce[],
"smazáno": boolean,
"trashedBy": <User>,
"unit": řetězec
}
služba
{
"ID": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"smazáno": boolean,
"název": řetězec,
"publicName": řetězec,
"tagy": řetězce[],
"smazáno": boolean,
"typ": řetězec
}
SubDomain
{
"ID": řetězec,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"smazáno": boolean,
"název": řetězec,
"tagy": řetězce[],
"smazáno": boolean
}
uživatel
{
"id": číslo,
"aktivní": boolean,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"e-mail": řetězec,
"jméno": řetězec,
"celéJméno": řetězec,
"innerId": number,
"pracovníPozice": řetězec,
"příjmení": řetězec,
"kód jazyka": řetězec,
"poznámka": řetězec,
"role": řetězec,
"tagy": řetězce[],
"časovéPásmo": řetězec,
"odstraněno": boolean,
"uživatelskéJméno": řetězec
}
dodavatel
{
"id": řetězec,
"candidate": boolean,
"dateCreated": Datum,
"dateDeleted": Datum,
"dateTrashed": Datum,
"odstraněno": boolean,
"tagy": řetězec[],
"token": řetězec,
"odstraněno": boolean
}
WorkflowStep
{
"id": řetězec,
"abbreviation": řetězec,
"dateDeleted": Datum,
"dateTrashed": Datum,
"název": řetězec,
"order": číslo,
"tags": řetězec[],
"smazáno": boolean
}
Index analýzy
Agregace dat
"data": {
"children": {
"type": "typ analýzy"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"projekt": <Project>,
"služba": <Service>
}
Vedlejší dokument
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"zakázk|a": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": číslo,
"data": {
"mt": {
"match0": {
"characters": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match100": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match50": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match75": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match85": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match95": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
}
},
"opakování": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"tm": {
"match0": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match100": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match101": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match50": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match75": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match85": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
},
"match95": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
}
},
"total": {
"znaky": číslo,
"pages": číslo,
"percent": číslo,
"segmenty": číslo,
"slova": číslo
}
}
}
API Index
Agregace dat
"data": {
"children": {
"type": "apiType"
}
}
Hlavní dokument
{
"user": <User>
}
Vedlejší dokument
{
"request": {
"date": Datum,
"host": řetězec,
"ipv4": řetězec,
"ipv6": řetězec,
"umístění": řetězec,
"metoda": řetězec
},
"response": {
"date": Datum,
"duration": number,
"stav": číslo
},
"API": {
"action": řetězec,
"asynch": boolean,
"type": řetězec,
"uri": řetězec,
"ver": řetězec
}
}
Costs Index
Agregace dat
"data": {
"children": {
"type": "costsType"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"projekt": <Project>,
"služba": <Service>
}
Vedlejší dokument
{
"analysis": <Analysis>,
"zakázk|a": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"cenová nabídka": <Quote>,
"pracovní postup": <WorkflowStep>,
"priority": číslo,
"data": {
"mt": {
"match0": číslo,
"match100": číslo,
"match50": číslo,
"match75": číslo,
"match85": číslo,
"match95": číslo
},
"opakování": číslo,
"tm": {
"match0": číslo,
"match100": číslo,
"match101": číslo,
"match50": číslo,
"match75": číslo,
"match85": číslo,
"match95": číslo
},
"celkem": číslo
}
}
index části zakázky
Agregace dat
"data": {
"children": {
"type": "jobPartType"
}
}
Hlavní dokument
{
"automationWidget": <AutomationWidget>,
"projekt": <Project>,
"service": <Service>
}
Vedlejší dokument
{
"zakázk|a": <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
},
"skupiny": {
"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": číslo,
"relevantní": číslo,
"nerelevantní": číslo
},
"qa": {
"zkontrolováno": číslo,
"nezkontrolováno": číslo
}
},
"slova": {
"celkem": číslo,
"potvrzeno": číslo,
"nepotvrzeno": číslo,
"zamknuto": číslo,
"nezamknuto": číslo,
"potvrzenoAZamknuto": číslo,
"nepotvrzenoAZamknuto": číslo,
"dokončeno": číslo,
"nedokončeno": číslo
},
"qa": {
"varování": číslo,
"ignorovanáVarování": číslo,
"neignorovanáVarování": číslo
}
}
}
-
HTTP požadavky jsou prováděny v Postmanu.
-
Přihlaste se přes PM nebo profil 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 zakázek
Dotaz
{
"agregace": {
"data": {
"vedlejší": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"data": {
"doc_count": 14417
}
}
}
Pod polem aggregations odpověděl agregát data s 14 417 odpovídajícími dokumenty zobrazenými v poli doc_count.
Celkový počet zdrojových slov
Dotaz
{
"agregace": {
"data": {
"vedlejší": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Odpověď
{
"hits": {
"total": 359
},
"agregace": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Celkový počet slov ve zdrojovém jazyce 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
},
"agregations": {
"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 Analytics požádán, aby rozdělil data podle nějaké kategorie, výsledek je zobrazen jako seznam bucketů. Každý bucket obsahuje klíč, který určuje, 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 zakázek rozdělený podle stavu 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": "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"
}
]
}
}
}
Modul Analytics byl požádán, aby rozdělil data podle stavu projektu před data agregací.
Celkový počet zakázek z nových projektů
Dotaz
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregace": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Odpověď
{
"hits": {
"total": 326
},
"aggregace": {
"data": {
"doc_count": 14318
}
}
}
Pole filtr se používá v dotazu. To zúží data před následujícími agregacemi.