Il datastore che esegue le query di aggregazione è costruito su Elasticsearch (attualmente versione 1.7.x). Elasticsearch fornisce ricerche in tempo reale e capacità di aggregazione con l'API di Analytics che forma uno strato sottile, migliorato in sicurezza, sopra di esso. Il linguaggio di query e aggregazione di Elasticsearch è utilizzato negli esempi.
-
Il linguaggio utilizzato nel campo filtrare del JSON della query è descritto nella documentazione Elasticsearch Query DSL.
-
Il linguaggio utilizzato nel campo aggregazioni del JSON della query è completamente descritto nella documentazione Elasticsearch Aggregations.
Indici
Tipi diversi di dati vivono in indici diversi. Ad esempio, i dati lavoro vivono nell'indice jobPart, e i dati costi vivono nell'indice costi. I dati richiesti possono essere specificati specificando l'indice nell'URL dell'endpoint API di aggregazione.
Documenti Genitore-Figlio
Parti delle informazioni su un lavoro vivono in due documenti diversi nel DB di Elasticsearch. Questi documenti sono in una relazione genitore-figlio. Ad esempio, le informazioni sul progetto di un lavoro vivono nel documento genitore, mentre le informazioni sul lavoro stesso vivono nel documento figlio. A seconda delle informazioni richieste, le aggregazioni sono o prima dell'aggregazione genitore-figlio dei dati o dopo di essa, ma l'aggregazione dei dati stessa dovrebbe essere presente in tutte le query.
Dati Comuni
Analisi
{
"id": stringa,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"innerId": number,
"nome": stringa,
"tags": string[],
"cestinato": booleano,
"trashedBy": <User>,
"tipo": stringa,
}
Assegnazione
{
"nome": stringa,
"linguista": <Utente>,
"vendor": <Vendor>
}
Portale Richieste
{
"id": stringa,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"nome": stringa,
"tags": string[],
"cestinato": booleano,
"urlId": string
}
Committente
{
"id": stringa,
"nome": stringa,
}
Cliente
{
"id": stringa,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"externalId": string,
"nome": stringa,
"tags": string[],
"cestinato": booleano,
}
CostCenter
{
"id": stringa,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"nome": stringa,
"tags": string[],
"cestinato": booleano,
}
Dominio
{
"id": stringa,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"nome": stringa,
"tags": string[],
"cestinato": booleano
}
Job
{
"id": stringa,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"extension": string,
"fileName": string,
"conteggioGruppo": numero,
"innerId": "1",
"coppiaLingua": stringa,
"ultimaModifica": Data,
"coppiaLocale": stringa,
"linguaSorgente": stringa,
"localeSorgente": stringa,
"tags": string[],
"targetLanguage": string,
"targetLocale": string",
"taskId": string,
"cestinato": booleano,
"trashedBy": <User>,
"uid": stringa
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"indiceInizio": numero,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"indiceFine": numero,
"conteggioGruppo": numero,
"innerId": string,
"ultimaModifica": Data,
"livello": numero,
"stato": stringa,
"tags": [],
"uid": stringa,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": stringa,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"nome": stringa,
"tags": string[],
"type": string,
}
NetRateScheme
{
"id": stringa,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": string,
"nome": stringa,
"tags": string[],
}
ListinoPrezzi
{
"id": stringa,
"createdBy": <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"default_": boolean,
"deleted": boolean,
"nome": stringa,
"tags": string[],
"cestinato": booleano,
"unit": string
}
Progetto
{
"id": stringa,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dataCestino": Data,
"deleted": boolean,
"domain": <Domain>,
"innerId": number,
"languagePairs": string[],
"localePairs": string[],
"mtEngine": <MtEngine>,
"nome": stringa,
"note": string,
"owner": <utente>,
"linguaSorgente": stringa,
"localeSorgente": stringa,
"stato": stringa,
"subDomain": <SubDomain>,
"tags": string[],
"targetLanguages": string[],
"targetLocales": string[],
"cestinato": booleano,
"trashedBy": <User>,
"uid": stringa,
"vendor": <Vendor>
}
Preventivo
{
"id": stringa,
"createdBy": <utente>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"innerId": string,
"nome": stringa,
"stato": stringa,
"tags": string[],
"cestinato": booleano,
"trashedBy": <User>,
"unit": string
}
Servizio
{
"id": stringa,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"nome": stringa,
"publicName": string,
"tags": string[],
"cestinato": booleano,
"tipo": stringa,
}
sottodominio
{
"id": stringa,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"nome": stringa,
"tags": string[],
"cestinato": booleano
}
utente
{
"id": numero,
"attivo": booleano,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"email": stringa,
"firstName": string,
"fullName": string,
"innerId": number,
"jobTitle": string,
"lastName": string,
"impostazioniLocali": stringa,
"note": string,
"ruolo": stringa,
"tags": string[],
"timeZone": string,
"cestinato": booleano,
"userName": string
}
Vendor
{
"id": stringa,
"candidato": booleano,
"dateCreated": Date,
"dateDeleted": Date,
"dataCestino": Data,
"deleted": boolean,
"tags": string[],
"token": stringa,
"cestinato": booleano
}
WorkflowStep
{
"id": stringa,
"abbreviazione": stringa,
"dateDeleted": Date,
"dataCestino": Data,
"nome": stringa,
"ordine": numero,
"tags": string[],
"cestinato": booleano
}
IndiceAnalisi
AggregazioneDati
"data": {
"children": {
"type": "analysisType"
}
}
Documento principale
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento subordinato
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priorità": numero,
"data": {
"mt": {
"match0": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match100": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match50": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match75": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"corrispondenza85": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match95": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
}
},
"repetitions": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"tm": {
"match0": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match100": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match101": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match50": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match75": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"corrispondenza85": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
},
"match95": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
}
},
"total": {
"caratteri": numero,
"pagine": numero,
"percentuale": numero,
"segmenti": numero,
"parole": numero
}
}
}
Indice API
AggregazioneDati
"data": {
"children": {
"type": "apiType"
}
}
Documento principale
{
"user": <utente>
}
Documento subordinato
{
"request": {
"date": Date,
"host": stringa,
"ipv4": stringa,
"ipv6": string,
"location": stringa,
"method": stringa
},
"response": {
"date": Date,
"duration": numero,
"status": numero
},
"api": {
"action": stringa,
"asynch": booleano,
"type": string,
"uri": stringa,
"ver": stringa
}
}
Indice dei Costi
AggregazioneDati
"data": {
"children": {
"type": "costsType"
}
}
Documento principale
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento subordinato
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"priorità": numero,
"data": {
"mt": {
"corrispondenza0": numero,
"corrispondenza100": numero,
"corrispondenza50": numero,
"corrispondenza75": numero,
"corrispondenza85": numero,
"corrispondenza95": numero
},
"ripetizioni": numero,
"tm": {
"corrispondenza0": numero,
"corrispondenza100": numero,
"corrispondenza101": numero,
"corrispondenza50": numero,
"corrispondenza75": numero,
"corrispondenza85": numero,
"corrispondenza95": numero
},
"totale": numero
}
}
indiceJobPart
Aggregazione Dati
"data": {
"children": {
"type": "jobPartType"
}
}
Documento Principale
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento Sottordinato
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"counts": {
"chars": {
"totale": numero,
"confermato": numero,
"nonConfermato": numero,
"bloccato": numero,
"nonBloccato": numero,
"confermatoEBloccato": numero,
"notConfirmedAndLocked": number,
"completato": numero,
"nonCompletato": numero
},
"groups": {
"totale": numero
},
"segmenti": {
"totale": numero,
"confermato": numero,
"nonConfermato": numero,
"bloccato": numero,
"nonBloccato": numero,
"confermatoEBloccato": numero,
"notConfirmedAndLocked": number,
"completato": numero,
"nonCompletato": numero,
"mt": {
"postModificato": numero,
"rilevante": numero,
"nonRilevante": numero
},
"qa": {
"controllato": numero,
"nonControllato": numero
}
},
"words": {
"totale": numero,
"confermato": numero,
"nonConfermato": numero,
"bloccato": numero,
"nonBloccato": numero,
"confermatoEBloccato": numero,
"notConfirmedAndLocked": number,
"completato": numero,
"nonCompletato": numero
},
"qa": {
"avvisi": numero,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
Le richieste HTTP vengono eseguite in Postman.
-
Accedi tramite un profilo PM o Admin e ottieni un token di accesso utilizzando un'API di accesso.
-
Richieste POST a
api/v3/analisi/jobPart?token=<tuo_token_di_accesso>
Numero Totale di Lavori
Query
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Risposta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
Sotto il campo aggregazioni, l'aggregazione dati ha risposto con 14.417 documenti corrispondenti mostrati nel campo doc_count.
Numero totale di parole sorgente
Query
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Risposta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Numero totale di parole sorgente diviso per lingua target
Query
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Risposta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"byTargetLanguage": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 10071,
"secchi": [
{
"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
}
}
}
L'entità secchi è mostrata nella risposta. Quando al modulo di analisi viene chiesto di dividere i dati per qualche categoria, il risultato è rappresentato come un elenco di secchi. Ogni secchio contiene una chiave che definisce quali dati rappresenta questo secchio (in questo caso una lingua target) e un valore (altre aggregazioni) specifico solo per questa parte del set di dati.
Numero totale di lavori diviso per stato del progetto
Query
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Risposta
{
"hits": {
"total": 359
},
"aggregations": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"secchi": [
{
"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"
}
]
}
}
}
Il modulo di analisi è stato informato di dividere i dati per stato del progetto prima dell'aggregazione data.
Numero totale di lavori da nuovi progetti
Query
{
"filter": {
"term": {
"project.status": "NUOVO"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Risposta
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
Il campo filtrare viene utilizzato nella query. Questo restringe i dati prima delle aggregazioni successive.