El datastore 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 Analytics formando una capa delgada y mejorada en seguridad sobre él. El lenguaje de consulta y agregación de Elasticsearch se utiliza en los ejemplos.
-
El idioma usado en el campo filter 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 se pueden especificar al indicar el índice en la URL del endpoint de la API de agregación.
Documentos elemento raíz-elemento secundario
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 elemento raíz-elemento secundario. Por ejemplo, la información sobre el proyecto de un trabajo está en el documento elemento raíz, mientras que la información sobre el trabajo en sí está en el documento elemento secundario. Dependiendo de la información requerida, las agregaciones están antes de la agregación de datos elemento raíz-elemento secundario 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,
"creadoPor": <usuario>,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"idInterno": número,
"nombre": cadena,
"etiquetas": cadena[],
"enBasura": boolean,
"trashedBy": <User>,
"tipo": cadena
}
Asignación
{
"nombre": cadena,
"lingüista": <usuario>,
"proveedor": <proveedor>
}
Portal de solicitudes
{
"id": cadena,
"createdBy": <usuario>,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"nombre": cadena,
"tags": cadena[],
"trashed": boolean,
"idUrl": cadena
}
Comprador
{
"id": cadena,
"nombre": cadena
}
Cliente
{
"id": cadena,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"externalId": cadena,
"nombre": cadena,
"tags": cadena[],
"enBasura": boolean,
}
CostCenter
{
"id": string,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"nombre": cadena,
"tags": cadena[],
"enBasura": boolean,
}
domain
{
"id": string,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": booleano,
"nombre": cadena,
"etiquetas": cadena[],
"eliminado": booleano
}
Job
{
"ID": cadena,
"createdBy": <usuario>,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"extensión": cadena,
"nombreArchivo": cadena,
"groupCount": número,
"innerId": "1",
"languagePair": cadena,
"lastModified": Fecha,
"localePair": cadena,
"idiomaFuente": cadena,
"sourceLocale": cadena,
"etiquetas": cadena[],
"idiomaMeta": cadena,
"targetLocale": cadena,
"taskId": cadena,
"trashed": boolean,
"trashedBy": <User>,
"uid": cadena
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": número,
"buyer": <buyer>,
"createdBy": <User>,
"dateCreated": Fecha,
"dateDue": Fecha,
"endIndex": número,
"groupCount": número,
"innerId": cadena,
"lastModified": Fecha,
"level": número,
"status": cadena,
"tags": [],
"uid": cadena,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": cadena,
"eliminado": boolean,
"default_: booleano,
"includeTags": booleano,
"nombre": cadena,
"tags": cadena[],
"type": cadena,
}
NetRateScheme
{
"id": cadena,
"createdBy": <usuario>,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"default_": booleano,
"eliminado": boolean,
"externalId": cadena,
"nombre": cadena,
"tags": cadena[],
}
PriceList
{
"id": cadena,
"createdBy": <usuario>,
"currency": cadena,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"default_": booleano,
"eliminado": boolean,
"nombre": cadena,
"tags": cadena[],
"enBasura": boolean,
"unit": cadena
}
Proyecto
{
"id": ID,
"buyer": <Comprador>,
"client": <Cliente>,
"centroDeCosto": <CostCenter>,
"creadoPor": <usuario>,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateDue": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"dominio": <Domain>,
"idInterno": número,
"paresDeIdioma": cadena[],
"paresDeLocales": cadena[],
"mtEngine": <MtEngine>,
"nombre": cadena,
"nota": cadena,
"propietario": <User>,
"fuente": cadena,
"localización": cadena,
"estado": cadena,
"subDomain": <SubDomain>,
"etiquetas": cadena[],
"targetLanguages": string[],
"targetLocales": string[],
"enBasura": boolean,
"trashedBy": <User>,
"uid": cadena,
"proveedor": <Vendor>
}
Cotización
{
"id": ID,
"createdBy": <User>,
"currency": cadena,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"innerId": cadena,
"nombre": cadena,
"status": cadena,
"tags": etiqueta[],
"trashed": boolean,
"trashedBy": <User>,
"unit": cadena
}
Servicio
{
"id": cadena,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"nombre": cadena,
"nombrePublico": cadena,
"tags": cadena[],
"trashed": boolean,
"tipo": cadena
}
Subdominio
{
"id": cadena,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"nombre": cadena,
"tags": cadena[],
"trashed": boolean
}
Usuario
{
"id": número,
"activo": booleano,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"correoElectrónico": cadena,
"primerNombre": cadena
"fullName": cadena,
"idInterno": número,
"jobTitle": cadena,
"lastName": cadena,
"locale": localización,
"nota": cadena,
"role": cadena,
"tags": cadena[],
"timeZone": cadena,
"trashed": boolean,
"userName": string
}
proveedor
{
"id": string,
"candidate": boolean,
"dateCreated": Fecha,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"eliminado": boolean,
"tags": string[],
"token": identificador único (token),
"trashed": boolean
}
WorkflowStep
{
"id": cadena,
"abbreviation": cadena,
"dateDeleted": Fecha,
"dateTrashed": Fecha,
"nombre": cadena,
"order": número,
"tags": string[],
"eliminado": booleano
}
Índice de análisis
agregación de datos
"data": {
"children": {
"type": "tipo de análisis"
}
}
Documento principal
{
"automationWidget": <AutomationWidget>,
"proyecto": <Proyecto>,
"service": <Service>
}
Documento secundario
{
"análisis": <Análisis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"prioridad": número,
"data": {
"mt": {
"match0": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match100": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"match50": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"coincidencia75": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"coincidencia85": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"coincidencia95": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
},
"repetición": {
"carácter": número,
"páginas": número,
"porcentaje": número,
"segmento": número,
"palabras": número
},
"tm": {
"match0": {
"carácter": número,
"páginas": número,
"porcentaje": número,
"segmento": número,
"palabras": número
},
"match100": {
"carácter": número,
"páginas": número,
"porcentaje": número,
"segmento": número,
"palabras": número
},
"match101": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"concordancia50": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"concordancia75": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"concordancia85": {
"caracteres": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
},
"concordancia95": {
"carácter": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
},
"total": {
"carácter": número,
"páginas": número,
"porcentaje": número,
"segmentos": número,
"palabras": número
}
}
}
Índice de API
Agregación de datos
"data": {
"elementos secundarios": {
"tipo": "apiType"
}
}
Documento elemento raíz
{
"user": <User>
}
Documento elemento secundario
{
"solicitud": {
"fecha": Fecha,
"host": cadena,
"ipv4": cadena,
"ipv6": cadena,
"ubicación": cadena,
"método": cadena
},
"respuesta": {
"fecha": Fecha,
"duración": número,
"estado": número
},
"api": {
"acción": cadena,
"asynch": boolean,
"type": cadena,
"uri": cadena,
"ver": cadena
}
}
Índice de Costos
Agregación de Datos
"data": {
"children": {
"type": "costsType"
}
}
Documento principal
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento Hijo
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"cotización": <Quote>,
"flujoDeTrabajoPaso": <WorkflowStep>,
"priority": número,
"data": {
"mt": {
"match0": número,
"match100": número,
"match50": número,
"match75": número,
"match85": número,
"match95": número
},
"repetición": 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 de jobPart
Agregación de Datos
"data": {
"children": {
"type": "jobPartType"
}
}
Documento principal
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento secundario
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"counts": {
"chars": {
"total": número,
"confirmed": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmedAndLocked": número,
"noConfirmadoYBloqueado": número,
"completado": número,
"noCompletado": número,
},
"grupos": {
"total": número
},
"segmentos": {
"total": número,
"confirmed": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmedAndLocked": 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,
}
},
"palabras": {
"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": {
"avisos": número,
"avisosIgnorados": número,
"noAvisosIgnorados": número
}
}
}
-
Las solicitudes HTTP se ejecutan en Postman.
-
Inicia sesión con un perfil de PM o admin, y consigue un identificador único (token) de inicio de sesión usando una API de inicio de sesión.
-
Solicitudes POST a
api/v3/analytics/jobPart?token=<tu_identificador_único_(token)_de_inicio_de_sesión>
Número Total de Trabajos
Consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
En el campo aggregations, la agregación data respondió con 14,417 documentos que coinciden, mostrados en el campo doc_count.
Número total de palabras de fuente
Consulta
{
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"agregaciones": {
"data": {
"doc_count": 14417,
"wordCount": {
"valor": 6893067
}
}
}
}
Número total de palabras de la fuente dividido por el idioma meta
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
},
"aggregations": {
"data": {
"byTargetLanguage": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 10071,
"cubos": [
{
"doc_count": 1835,
"wordCount": {
"valor": 702721
},
"clave": "cs"
},
{
"doc_count": 1491,
"wordCount": {
"valor": 2602529
},
"clave": "de"
},
{
"doc_count": 1020,
"wordCount": {
"valor": 92676
},
"clave": "fi"
}
]
},
"doc_count": 14417
}
}
}
La entidad buckets se muestra en la respuesta. Cuando le pides al módulo de estadísticas que divida los datos por alguna categoría, el resultado se muestra como una lista de buckets. Cada bucket contiene una clave que define qué datos representa este bucket (en este caso un idioma meta) 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": {
"términos": {
"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,
"buckets": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"key": "NEW"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"key": "COMPLETAR"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ASIGNAR"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
El módulo de estadísticas se configuró para dividir los datos por estado del proyecto antes de la data agregación.
Número total de trabajos de nuevos proyectos
Consulta
{
"filter": {
"término": {
"project.status": "NEW"
}
},
"agregaciones": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
El campo filter se utiliza en la consulta. Esto reduce los datos antes de las siguientes agregaciones.