El almacén de datos que ejecuta consultas de agregación está construido sobre Elasticsearch (actualmente versión 1.7.x). Elasticsearch proporciona búsquedas en tiempo real y capacidades de agregación, con la API de análisis formando una capa delgada y mejorada en seguridad sobre ella. El lenguaje de consulta y agregación de Elasticsearch se utiliza en los ejemplos.
-
El lenguaje utilizado en el campo filtro del JSON de consulta se describe en la documentación de Elasticsearch Query DSL.
-
El lenguaje utilizado en el campo agregaciones del JSON de consulta se describe completamente en la documentación de Elasticsearch Aggregations.
Índices
Diferentes tipos de datos residen en diferentes índices. Por ejemplo, los datos de trabajo residen en el índice parteTrabajo, y los datos de costos residen en el índice costos. Los datos requeridos pueden especificarse al indicar el índice en la URL del punto final de la API de agregación.
Documentos Padre-Hijo
Partes de la información sobre un trabajo residen en dos documentos diferentes en la base de datos de Elasticsearch. Estos documentos están en una relación padre-hijo. Por ejemplo, la información sobre el proyecto de un trabajo reside en el documento padre, mientras que la información sobre el trabajo en sí reside en el documento hijo. Dependiendo de la información requerida, las agregaciones están ya sea antes de la agregación de datos padre-hijo o después de ella, pero la agregación de datos en sí debe estar presente en todas las consultas.
Datos Comunes
Análisis
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"idInterno": número,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
"trashedBy": <User>,
"tipo": cadena,
}
Asignación
{
"nombre": cadena,
"lingüista": <Usuario>,
"vendor": <Vendor>
}
Portal de Solicitudes
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
"idUrl": cadena,
}
Comprador
{
"id": cadena,
"nombre": cadena,
}
Cliente
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"idExterno": cadena,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
}
CentroDeCostos
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
}
Dominio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"trashed": boolean
}
Job
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"extension": cadena,
"fileName": cadena,
"groupCount": number,
"innerId": "1",
"languagePair": cadena,
"lastModified": Fecha,
"localePair": string,
"sourceLanguage": cadena,
"sourceLocale": cadena,
"etiquetas": cadena[],
"targetLanguage": cadena,
"targetLocale": string",
"taskId": cadena,
"enBasura": booleano,
"trashedBy": <User>,
"uid": cadena
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"comprador": <Comprador>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"indiceFinal": número,
"groupCount": number,
"idInterno": cadena,
"lastModified": Fecha,
"nivel": número,
"estado": cadena,
"tags": [],
"uid": cadena,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": cadena,
"eliminado": booleano,
"predeterminado": booleano,
"incluirEtiquetas": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"tipo": cadena,
}
NetRateScheme
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"eliminado": booleano,
"idExterno": cadena,
"nombre": cadena,
"etiquetas": cadena[],
}
ListaDePrecios,
{
"id": cadena,
"createdBy": <User>,
"moneda": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
"unidad": cadena,
}
Proyecto,
{
"id": cadena,
"comprador": <Comprador>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dateTrashed": Date,
"eliminado": booleano,
"domain": <Domain>,
"idInterno": número,
"paresDeIdioma": cadena[],
"paresDeLocalización": cadena[],
"mtEngine": <MtEngine>,
"nombre": cadena,
"nota": cadena,
"propietario": <User>,
"sourceLanguage": cadena,
"sourceLocale": cadena,
"estado": cadena,
"subDomain": <SubDomain>,
"etiquetas": cadena[],
"idiomasObjetivo": cadena[],
"localizacionesObjetivo": cadena[],
"enBasura": booleano,
"trashedBy": <User>,
"uid": cadena,
"vendor": <Vendor>
}
Cotización
{
"id": cadena,
"creadoPor": <User>,
"moneda": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"idInterno": cadena,
"nombre": cadena,
"estado": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
"trashedBy": <User>,
"unidad": cadena,
}
Servicio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"nombre": cadena,
"nombrePublico": cadena,
"etiquetas": cadena[],
"enBasura": booleano,
"tipo": cadena,
}
Subdominio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"trashed": boolean
}
Usuario
{
"id": número,
"activo": booleano,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"correoElectrónico": cadena,
"primerNombre": cadena.
"fullName": cadena,
"idInterno": número,
"jobTitle": cadena,
"lastName": cadena,
"locale": localización,
"nota": cadena,
"role": cadena,
"etiquetas": cadena[],
"timeZone": cadena,
"enBasura": booleano,
"userName": string
}
Vendor
{
"id": cadena,
"candidate": booleano,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"eliminado": booleano,
"etiquetas": cadena[],
"token": identificador único (token),
"trashed": boolean
}
WorkflowStep
{
"id": cadena,
"abbreviation": cadena,
"dateDeleted": Date,
"dateTrashed": Date,
"nombre": cadena,
"order": número,
"etiquetas": cadena[],
"trashed": boolean
}
ÍndiceDeAnálisis
AgregaciónDeDatos
"data": {
"children": {
"type": "analysisType"
}
}
DocumentoRaíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Elemento secundario Documento
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"prioridad": número,
"data": {
"mt": {
"match0": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"coincidencia100": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match50": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match75": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match85": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match95": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
},
"repeticiones": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"tm": {
"match0": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"coincidencia100": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match101": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match50": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match75": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match85": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match95": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
},
"total": {
"characters": number,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
}
}
Índice de API
AgregaciónDeDatos
"data": {
"children": {
"type": "apiType"
}
}
DocumentoRaíz
{
"user": <User>
}
Elemento secundario Documento
{
"request": {
"date": Date,
"host": cadena,
"ipv4": cadena,
"ipv6": cadena,
"location": cadena,
"method": cadena
},
"response": {
"date": Date,
"duration": número,
"status": número
},
"api": {
"action": cadena,
"asynch": booleano,
"tipo": cadena,
"uri": cadena,
"ver": cadena
}
}
Índice de Costos
AgregaciónDeDatos
"data": {
"children": {
"type": "costsType"
}
}
DocumentoRaíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Elemento secundario Documento
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"prioridad": número,
"data": {
"mt": {
"coincidencia0": número,
"coincidencia100": número,
"coincidencia50": número,
"coincidencia75": número,
"coincidencia85": número,
"coincidencia95": número
},
"repeticiones": número,
"tm": {
"coincidencia0": número,
"coincidencia100": número,
"coincidencia101": número,
"coincidencia50": número,
"coincidencia75": número,
"coincidencia85": número,
"coincidencia95": número
},
"total": número
}
}
Índice de trabajo
Agregación de datos
"data": {
"children": {
"type": "jobPartType"
}
}
Documento raíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento secundario
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"cuentas": {
"chars": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,
"completado": número,
"noCompletado": número
},
"groups": {
"total": número
},
"segmentos": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,
"completado": número,
"noCompletado": número,
"mt": {
"postEditado": número,
"relevante": número,
"noRelevante": número
},
"qa": {
"verificado": número,
"noVerificado": número
}
},
"words": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,
"completado": número,
"noCompletado": número
},
"qa": {
"advertencias": número,
"ignoredWarnings": number,
"advertenciasNoIgnoradas": número
}
}
}
-
Las solicitudes HTTP se ejecutan en Postman.
-
Inicie sesión a través de un perfil de PM o Admin, y obtenga un identificador único de inicio de sesión utilizando una API de inicio de sesión.
-
POST requests to
api/v3/analytics/jobPart?token=<your_login_token>
Número total de trabajos
Consulta
{
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"agregaciones": {
"data": {
"doc_count": 14417
}
}
}
Bajo el campo agregaciones, la agregación data respondió con 14,417 documentos coincidentes mostrados en el campo doc_count.
Número total de palabras fuente
Consulta
{
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"agregaciones": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Número total de palabras fuente dividido por el idioma objetivo
Consulta
{
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"agregaciones": {
"data": {
"byTargetLanguage": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 10071,
"cubos": [
{
"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
}
}
}
La entidad buckets se muestra en la respuesta. Cuando se le pide al módulo de estadísticas que divida los datos por alguna categoría, el resultado se representa como una lista de buckets. Cada bucket contiene una clave que define qué datos representa este bucket (en este caso un idioma objetivo) y un valor (otras agregaciones) específico solo para esta parte del conjunto de datos.
Número Total de Trabajos Divididos por Estado del Proyecto
Consulta
{
"agregaciones": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"agregaciones": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"cubos": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"key": "NEW"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"key": "COMPLETADO"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ASIGNADO"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Se le ha indicado al módulo de estadísticas que divida los datos por estado del proyecto antes de la agregación data.
Número Total de Trabajos de Nuevos Proyectos
Consulta
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 326
},
"agregaciones": {
"data": {
"doc_count": 14318
}
}
}
El campo filter se utiliza en la consulta. Esto reduce los datos antes de las siguientes agregaciones.