O datastore que executa consultas de agregação é construído sobre o Elasticsearch (atualmente versão 1.7.x). O Elasticsearch fornece buscas em tempo real e capacidades de agregação, com a Analytics API formando uma camada fina e aprimorada de segurança sobre ele. A linguagem de consulta e agregação do Elasticsearch é usada nos exemplos.
-
A linguagem usada no campo filter do JSON da consulta é descrita na documentação do Elasticsearch Query DSL.
-
A linguagem usada no campo agregações do JSON da consulta é totalmente descrita na documentação do Elasticsearch Aggregations.
Índices
Diferentes tipos de dados vivem em diferentes índices. Por exemplo, dados de trabalho vivem no índice jobPart, e dados de custos vivem no índice custos. Os dados necessários podem ser especificados ao indicar o índice na URL do endpoint da API de agregação.
Documentos Principal-Secundário
Partes da informação sobre um trabalho vivem 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 ficam no documento principal, enquanto informações sobre o próprio trabalho ficam no documento secundário. Dependendo das informações necessárias, as agregações estão antes da agregação de dados principal-secundário 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": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"innerId": number,
"nome": string,
"códigos": string,
"excluído": booleano,
"trashedBy": <User>,
"tipo": string
}
Atribuição
{
"nome": string,
"linguista": <User>,
"fornecedor": <Vendor>
}
Portal de Solicitações
{
"id": string,
"createdBy": <User>,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"nome": string,
"códigos": string[],
"excluído": booleano,
"urlId": string
}
Comprador
{
"id": string,
"nome": string
}
Cliente
{
"id": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"idExterno": string,
"nome": string,
"códigos": string,
"excluído": booleano,
}
CostCenter
{
"id": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"nome": string,
"códigos": string,
"excluído": booleano,
}
Domínio
{
"id": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"nome": string,
"tags": string[],
"excluído": booleano
}
Trabalho
{
"id": string,
"createdBy": <User>,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"extensão": string,
"fileName": string,
"groupCount": número,
"innerId": "1",
"languagePair": string,
"lastModified": Data,
"localePair": string,
"idiomaFonte": string,
"sourceLocale": string,
"tags": string[],
"idiomaTradução": string,
"targetLocal": string,
"tarefaId": string,
"trashed": boolean,
"trashedBy": <User>,
"uid": string
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Data,
"dateDue": Data,
"endIndex": number,
"contagemGrupo": número,
"innerId": string,
"lastModified": Data,
"nível": número,
"estado": string,
"tags": [],
"uid": string,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": string,
"excluído": booleano,
"default_: boolean,
"includeTags": boolean,
"nome": string,
"tags": string[],
"tipo": string,
}
NetRateScheme
{
"id": string,
"createdBy": <User>,
"dateCreated": Data,
"dateDeleted": Data,
"default_": boolean,
"excluído": booleano,
"idExterno": string,
"nome": string,
"tags": string[],
}
Lista de Preços
{
"id": string,
"createdBy": <User>,
"currency": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"default_": boolean,
"excluído": booleano,
"nome": string,
"tags": string[],
"excluído": booleano,
"unit": string
}
Projeto
{
"id": string,
"comprador": <Buyer>,
"cliente": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Data,
"dateDeleted": Data,
"dateDue": Data,
"dateTrashed": Data,
"excluído": booleano,
"domínio": <Domain>,
"innerId": number,
"languagePairs": string[],
"localePairs": string[],
"mtEngine": <MtEngine>,
"nome": string,
"nota": string,
"proprietário": <User>,
"idiomaFonte": string,
"sourceLocale": string,
"estado": string,
"subtema": <SubDomain>,
"códigos": string[],
"targetLanguages": string[],
"targetLocais": string,
"excluído": booleano,
"trashedBy": <User>,
"uid": string,
"fornecedor": <Vendor>
}
Orçamento
{
"id": string,
"criadoPor: <User>,
"currency": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"innerId": string,
"nome": string,
"estado": string,
"códigos": string[],
"excluído": booleano,
"trashedBy": <User>,
"unit": string
}
Serviço
{
"id": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"nome": string,
"publicName": string,
"tags": string[],
"excluído": booleano,
"tipo": string
}
Subtema
{
"id": string,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"nome": string,
"tags": string[],
"excluído": booleano
}
Usuário
{
"id": número,
"ativo": booleano,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"e-mail": string,
"primeiroNome": string,
"fullName": string,
"innerId": number,
"jobTitle": string,
"lastName": string,
"local": string,
"nota": string,
"papel": string,
"códigos": string,
"fusoHorário": string,
"excluído": booleano,
"userName": string
}
Fornecedor
{
"id": string,
"candidato": booleano,
"dateCreated": Data,
"dateDeleted": Data,
"dateTrashed": Data,
"excluído": booleano,
"tags": string[],
"token": string,
"descartado": booleano
}
EtapaDoFluxo
{
"id": string,
"abreviação": string,
"dateDeleted": Data,
"dateTrashed": Data,
"nome": string,
"pedido": número,
"tags": string[],
"trashed": boolean
}
Índice de Análise
Agregação de Dados
"data": {
"children": {
"type": "analysisType"
}
}
Documento Principal
{
"automationWidget": <AutomationWidget>,
"projeto": <Projeto>,
"serviço": <Serviço>
}
Documento Secundário
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"prioridade": número,
"data": {
"mt": {
"correspondência0": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"palavras": número
},
"match100": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"palavras": número
},
"match50": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"palavras": número
},
"match75": {
"caracteres": número,
"páginas": número,
"percentual": número,
"segmentos": número,
"palavras": número
},
"match85": {
"caracteres": número,
"páginas": número,
"percentual": número,
"segmentos": número,
"palavras": número
},
"match95": {
"caracteres": número,
"páginas": número,
"percentual": número,
"segmentos": número,
"palavras": número
}
},
"repetitions": {
"caracteres": número,
"páginas": número,
"percentual": número,
"segments": número,
"words": número
},
"tm": {
"correspondencia0": {
"caracteres": número,
"páginas": número,
"percent": número,
"segments": número,
"words": número
},
"match100": {
"caracteres": número,
"páginas": número,
"percent": número,
"segments": número,
"words": número
},
"match101": {
"caracteres": número,
"páginas": número,
"percent": número,
"segments": número,
"words": número
},
"match50": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"words": número
},
"match75": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"words": número
},
"match85": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"words": número
},
"match95": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"words": número
}
},
"total": {
"caracteres": número,
"páginas": número,
"percent": número,
"segmentos": número,
"words": número
}
}
}
Índice da API
Agregação de Dados
"data": {
"secundários": {
"type": "tipoApi"
}
}
Documento Principal
{
"user": <User>
}
Documento Secundário
{
"request": {
"date": Data,
"host": string,
"ipv4": string,
"ipv6": string,
"localização": string,
"método": string
},
"resposta": {
"date": Data,
"duração": número,
"estado": número
},
"api": {
"ação": 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": <Projeto>,
"service": <Serviço>
}
Documento Secundário
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <orçamento>,
"workflowStep": <WorkflowStep>,
"priority": número,
"data": {
"mt": {
"match0": número,
"match100": número,
"match50": número,
"match75": número,
"match85": número,
"match95": número
},
"repetition": número,
"tm": {
"match0": número,
"match100": número,
"match101": número,
"match50": número,
"match75": número,
"match85": número,
"match95": número
},
"total": número
}
}
índice da parte do trabalho
Agregação de Dados
"data": {
"children": {
"type": "jobPartType"
}
}
Documento Principal
{
"automationWidget": <AutomationWidget>,
"project": <Projeto>,
"service": <Serviço>
}
Documento Secundário
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"counts": {
"chars": {
"total": número,
"confirmed": confirmado,
"notConfirmed": não confirmado,
"locked": bloqueado,
"notLocked": número,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": número,
"notCompleted": número,
},
"grupos": {
"total": número
},
"segments": {
"total": número,
"confirmed": número,
"notConfirmed": número,
"locked": bloqueado,
"nãoBloqueado": número,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completo": número,
"nãoCompleto": número,
"mt": {
"pósEditado": número,
"relevante": número,
"notRelevant": number
},
"qa": {
"verificado": número,
"nãoVerificado": número,
}
},
"palavras": {
"total": número,
"confirmed": confirmado,
"notConfirmed": não confirmado,
"locked": bloqueado,
"notLocked": número,
"confirmedAndLocked": número,
"notConfirmedAndLocked": número,
"completed": número,
"notCompleted": número,
},
"qa": {
"avisos": número,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
As requisições HTTP são executadas no Postman.
-
Faça login usando um perfil de GP ou admin e obtenha um token de login usando uma API de login.
-
Requisições POST para
api/v3/analytics/jobPart?token=<your_login_token>
Número Total de Trabalhos
Consulta
{
"agregações": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Resposta
{
"resultados": {
"total": 359
},
"agregações": {
"data": {
"doc_count": 14417
}
}
}
Sob o 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
{
"agregações": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"soma": {
"field": "data.volume.words"
}
}
}
}
}
}
Resposta
{
"resultados": {
"total": 359
},
"agregações": {
"data": {
"doc_count": 14417,
"wordCount": {
"valor": 6893067
}
}
}
}
Número total de palavras do texto original dividido pelo idioma de tradução
Consulta
{
"agregações": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"tamanho": 3
},
"aggs": {
"wordCount": {
"soma": {
"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
},
"chave": "cs"
},
{
"doc_count": 1491,
"wordCount": {
"value": 2602529
},
"chave": "de"
},
{
"doc_count": 1020,
"wordCount": {
"valor": 92676
},
"chave": "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 esse bucket representa (neste caso, um idioma de tradução) e um valor (outras agregações) específico só para essa parte do conjunto de dados.
Número total de trabalhos dividido pelo estado do projeto
Consulta
{
"agregações": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Resposta
{
"resultados": {
"total": 359
},
"agregações": {
"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": "CONCLUÍDO"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ATRIBUÍDO"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "RECUSADO_PELO_FORNECEDOR"
}
]
}
}
}
O módulo de estatísticas foi instruído a dividir os dados pelo estado do projeto antes da agregação data.
Número Total de Trabalhos de Novos Projetos
Consulta
{
"filter": {
"termo": {
"project.status": "NOVO"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Resposta
{
"hits": {
"total": 326
},
"agregações": {
"data": {
"doc_count": 14318
}
}
}
O campo filter é usado na consulta. Isso restringe os dados antes das agregações seguintes.