O armazenamento de dados que executa consultas de agregação é construído sobre o Elasticsearch (atualmente versão 1.7.x). O Elasticsearch fornece pesquisas em tempo real e recursos de agregação, com a API de estatísticas formando uma camada fina e com segurança aprimorada sobre ele. O idioma de consulta e agregação do Elasticsearch é usado nos exemplos.
-
O idioma usado no campo filtrar da consulta JSON é descrito na documentação Elasticsearch Query DSL.
-
O idioma usado no campo aggregations da consulta JSON é totalmente descrito na documentação Elasticsearch Aggregations.
Índices
Diferentes tipos de dados residem em diferentes índices. Por exemplo, dados de trabalho residem no índice jobPart, e dados de costs residem no índice costs. Os dados necessários podem ser especificados ao indicar o índice na URL do endpoint da API de estatísticas.
Documentos principal-secundário
Partes das informações sobre um trabalho residem em dois documentos diferentes no banco de dados Elasticsearch. Esses documentos estão em um relacionamento principal-secundário. Por exemplo, informações sobre o projeto de um trabalho residem no documento principal, enquanto informações sobre o próprio trabalho residem no documento secundário. Dependendo das informações necessárias, as agregações ficam antes da agregação principal-secundário de dados ou depois dela, mas a agregação de dados em si deve estar presente em todas as consultas.
Dados comuns
Análise
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"type": string
}
Atribuição
{
"name": string,
"linguist": <User>,
"vendor": <Vendor>
}
portal de solicitações
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"urlId": string
}
Comprador
{
"id": string,
"name": string
}
Cliente
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": string,
"name": string,
"tags": string[],
"trashed": boolean,
}
CostCenter
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
}
Tema
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
Trabalho
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": string,
"fileName": string,
"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": string
}
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": string,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": string,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": string,
"tags": string[],
"type": string,
}
NetRateScheme
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": string,
"name": string,
"tags": string[],
}
PriceList
{
"id": string,
"createdBy": <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"unit": string
}
Projeto
{
"id": string,
"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": string,
"vendor": <Vendor>
}
Orçamento
{
"id": string,
"createdBy: <usuário>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": string,
"status": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"unit": string
}
Serviço
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"publicName": string,
"tags": string[],
"trashed": boolean,
"type": string
}
SubDomain
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
Usuário
{
"ID": number,
"ativo": 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": string
}
Fornecedor
{
"id": string,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": string[],
"token": string,
"trashed": boolean
}
WorkflowStep
{
"id": string,
"abbreviation": string,
"dateDeleted": Date,
"dateTrashed": Date,
"name": string,
"pedido": number,
"tags": string[],
"trashed": boolean
}
Índice de análise
Agregação de dados
"data": {
"children": {
"type": "analysisType"
}
}
Documento principal
{
"automationWidget": <AutomationWidget>,"
"project": <Project>,
"service": <Service>
}
Documento secundário
{
"analysis": <Analysis>,
"jobPart": <JobPart>,"
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": number,
"data": {
"mt": {
"match0": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match100": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match50": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match75": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match85": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match95": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
}
},
"repetitions": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"tm": {
"match0": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match100": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match101": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match50": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match75": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match85": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
},
"match95": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
}
},
"total": {
"characters": number,
"páginas": number,
"porcentagem": number,
"segments": number,
"palavras": number
}
}
}
Índice da API
Agregação de dados
"data": {
"children": {
"type": "apiType"
}
}
Documento principal
{
"usuário": <usuário>
}
Documento secundário
{
"request": {
"date": Date,
"host": string,
"ipv4": string,
"ipv6": string,
"location": string,
"method": string
},
"response": {
"date": Date,
"duration": number,
"estado": number
},
"API": {
"action": string,
"asynch": boolean,
"type": string,
"uri": string,
"ver": string
}
}
Índice de Custos
Agregação de dados
"data": {
"children": {
"type": "costsType"
}
}
Documento principal
{
"automationWidget": <AutomationWidget>,"
"project": <Project>,
"service": <Service>
}
Documento secundário
{
"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
}
}
Índice de trabalhoPart
Agregação de Dados
"data": {
"children": {
"type": "jobPartType"
}
}
documento principal
{
\"automationWidget\": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
documento secundário
{
"job": <Job>,
\"jobPart\": <JobPart>
"data": {
"counts": {
"chars": {
\"total\": número,
\"confirmed\": número,
"notConfirmed": number,
\"locked\": número,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
\"completed\": número,
"notCompleted": number
},
"groups": {
\"total\": número
},
"segments": {
\"total\": número,
\"confirmed\": número,
"notConfirmed": number,
\"locked\": número,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
\"completed\": número,
"notCompleted": number,
"mt": {
"postEdited": number,
"relevant": number,
"notRelevant": number
},
"qa": {
"checked": number,
"notChecked": number
}
},
"words": {
\"total\": número,
\"confirmed\": número,
"notConfirmed": number,
\"locked\": número,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
\"completed\": número,
"notCompleted": number
},
"qa": {
"warnings": number,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
As solicitações HTTP são executadas no Postman.
-
Faça login através de um perfil de GP ou admin e obtenha um token de login usando uma API de login.
-
Solicitações POST para
api/v3/API/jobPart?token=<your_login_token>
Número total de trabalhos
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Resposta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
No campo aggregations, a agregação data respondeu com 14.417 documentos correspondentes mostrados no campo doc_count.
Número total de palavras do texto original
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Resposta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Número total de palavras do texto original dividido pelo idioma de tradução
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Resposta
{
"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
}
}
}
A entidade buckets é mostrada na resposta. Quando o módulo de estatísticas é solicitado a dividir os dados por alguma categoria, o resultado é representado como uma lista de buckets. Cada bucket contém uma chave que define quais dados este bucket representa (neste caso, um idioma de tradução) e um valor (outras agregações) específico apenas para esta parte do conjunto de dados.
Número total de trabalhos dividido pelo estado do projeto
consulta
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Resposta
{
"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"
}
]
}
}
}
O módulo de estatísticas foi instruído a dividir os dados por estado do projeto antes da agregação de dados.
Número total de trabalhos de novos projetos
consulta
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Resposta
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
O campo filtrar é usado na consulta. Isso restringe os dados antes das agregações seguintes.