Agregaciones de consulta
Utilice agregaciones para agrupar, analizar o comparar resultados devueltos por una solicitud de consulta.
Una agregación se define mediante un parámetro aggregation que puede especificar en la API de consulta. La entrada para el parámetro de agregación es el conjunto de documentos que se devuelve del parámetro query, filter o natural_language_query que se especifica como un parámetro independiente en la misma solicitud de consulta. De lo contrario, la agregación se aplica a todos los documentos del proyecto.
Puede utilizar una agregación para realizar cálculos a partir de valores del conjunto de documentos de resultados. Por ejemplo, para obtener información sobre la cantidad en dólares más alta en el campo order.total de los documentos
que se devuelven como resultados de consulta, utilice max(order.total) como valor del parámetro aggregation.
El parámetro de agregación devuelve datos sobre el campo con el valor más alto.
"aggregations": [
{
"type": "max",
"field": "order.total",
"value": 100668.00
}
]
Agrupación de documentos
Además de realizar cálculos, puede utilizar una agregación para agrupar documentos en el conjunto de resultados que coincidan con determinados valores, para que pueda contarlos o analizarlos más. Por ejemplo, puede utilizar una agregación para
buscar en un conjunto de informes de incidencias de tráfico los documentos que mencionan el término brake. Y a partir de los documentos devueltos, encontrar informes de los estados de Estados Unidos con las menciones más relevantes
del término.
En la solicitud de ejemplo siguiente, el parámetro de recuento que devuelve sólo 3 resultados de agregación se incluye para que el ejemplo sea más fácil de seguir.
{
"query":"brake",
"aggregation": "term(field:STATE,count:3,relevancy:true)"
}
La salida del parámetro de agregación se devuelve en un objeto aggregations que se visualiza antes del objeto results, que contiene los resultados de la consulta. Se puede devolver un máximo de 50.000 valores en el
objeto aggregations para una sola consulta.
El objeto aggregations resultante contiene información de resumen sobre los resultados de la consulta. En este ejemplo, por ejemplo, muestra que los informes de incidentes de tráfico de Nueva York, California y Florida tienen las
menciones más relevantes del término brake.
{
"matching_results": 9064,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "term",
"field": "STATE",
"results": [
{
"key": "NY",
"matching_results": 693,
"relevancy": 1.1649531567631084,
"total_matching_documents": 2156,
"estimated_matching_results": 542
},
{
"key": "CA",
"matching_results": 1210,
"relevancy": 1.1170819184294765,
"total_matching_documents": 4017,
"estimated_matching_results": 1011
},
{
"key": "FL",
"matching_results": 511,
"relevancy": 0.828014956418841,
"total_matching_documents": 2199,
"estimated_matching_results": 553
}
]
}
],
"results": []
Combinación de tipos de agregación
Existen diferentes tipos de agregaciones que puede utilizar para analizar o agrupar los resultados de la consulta. Y puede combinar más de una agregación en una solicitud para realizar un análisis más específico.
El ejemplo siguiente muestra una solicitud que se compone de dos operadores de términos. El primer término de agregación agrupa los documentos de entrada por valores de US STATE y selecciona 3 grupos. La agregación del segundo término se aplica a cada uno de esos tres grupos y los agrupa más por el valor del TPIY. Solo se devuelven 2 de estos subgrupos CITY por grupo STATE.
El parámetro de relevancia se está excluyendo para facilitar la lectura de los resultados.
{
"query":"brake",
"aggregation": "term(field:STATE,count:3).term(field:CITY,count:2)"
}
La respuesta contiene información de ciudad de cada estado.
{
"matching_results": 9064,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 3,
"results": [
{
"key": "CA",
"matching_results": 1210,
"aggregations": [
{
"type": "term",
"field": "CITY",
"count": 2,
"results": [
{
"key": "LOS ANGELES",
"matching_results": 77
},
{
"key": "SAN DIEGO",
"matching_results": 66
}
]
}
]
},
{
"key": "NY",
"matching_results": 693,
"aggregations": [
{
"type": "term",
"field": "CITY",
"count": 2,
"results": [
{
"key": "BROOKLYN",
"matching_results": 35
},
{
"key": "NEW YORK",
"matching_results": 21
}
]
}
]
},
{
"key": "FL",
"matching_results": 511,
"aggregations": [
{
"type": "term",
"field": "CITY",
"count": 2,
"results": [
{
"key": "JACKSONVILLE",
"matching_results": 33
},
{
"key": "TAMPA",
"matching_results": 29
}
]
}
]
}
]
}
],
"results": []
El orden en el que se especifican las agregaciones es importante. Por ejemplo, si invierte el orden de las agregaciones de términos del ejemplo anterior, obtendrá resultados diferentes.
{
"query":"brake",
"aggregation": "term(field:CITY,count:3).term(field:STATE,count:1)"
}
El nuevo orden produce resultados que afloran en Chicago, una ciudad que no estaba incluida en el conjunto de resultados anterior. Cuando la solicitud se inicia agrupando por estado, Illinois, que sólo tiene una ciudad con un gran número de informes de incidentes de tráfico, no se incluye en los resultados. Nueva York y Florida, que ambos tienen más de una ciudad con muchos informes de incidentes, producen un mayor número de partidos en todo el estado y, por lo tanto, fueron devueltos. Cuando se agrupa por ciudad en primer lugar, los resultados cambian.
{
"matching_results": 9064,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "term",
"field": "CITY",
"count": 4,
"results": [
{
"key": "LOS ANGELES",
"matching_results": 77,
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 1,
"results": [
{
"key": "CA",
"matching_results": 77
}
]
}
]
},
{
"key": "SAN DIEGO",
"matching_results": 66,
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 1,
"results": [
{
"key": "CA",
"matching_results": 66
}
]
}
]
},
{
"key": "CHICAGO",
"matching_results": 59,
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 1,
"results": [
{
"key": "IL",
"matching_results": 59
}
]
}
]
}
]
}
],
"results": []
Utilización de agregaciones para explorar enriquecimientos
La agregación term() es especialmente útil para analizar los resultados para averiguar cuántos enriquecimientos se reconocen en los documentos. Por ejemplo, para contar cuántas veces se reconoce cada tipo de entidad en los documentos
filtrados, puede enviar los siguientes parámetros de consulta:
{
"filter": "enriched_text.entities:(text::Gilroy,type::Location)",
"aggregation": "term(enriched_text.entities.type)"
}
La consulta primero selecciona los documentos que tienen al menos una entidad de tipo Location y cuyo texto es Gilroy. Esta acción devuelve 3 documentos. A partir de los documentos devueltos, la agregación cuenta el
número de documentos en los que aparece cada tipo de entidad.
{
"matching_results": 3,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "term",
"field": "enriched_text.entities.type",
"results": [
{
"key": "Location",
"matching_results": 3
},
{
"key": "Person",
"matching_results": 3
},
{
"key": "Company",
"matching_results": 2
},
{
"key": "GeographicFeature",
"matching_results": 2
},
{
"key": "Organization",
"matching_results": 2
},
{
"key": "Quantity",
"matching_results": 2
},
{
"key": "Facility",
"matching_results": 1
},
{
"key": "PrintMedia",
"matching_results": 1
}
]
}
]
}
Los 3 documentos coincidentes tienen un tipo de entidad Location y un tipo de entidad Person ("matching_results": 3). Sin embargo, sólo 2 de los documentos coincidentes tienen un tipo de entidad
Company.
De forma predeterminada, se devuelven las 10 principales coincidencias, ordenadas por relevancia. Puede cambiar el número de resultados añadiendo el parámetro count a la agregación.
{
"filter": "enriched_text.entities:(text::Gilroy,type::Location)",
"aggregation": "term(enriched_text.entities.type,count:20)"
}
Añadir un filtro
Utilice filter() en la cláusula de agregación para filtrar los resultados. Por ejemplo, puede especificar el mismo filtro que se ha enviado por separado en el ejemplo anterior directamente en la cláusula aggregation.
{
"aggregation": "filter(enriched_text.entities:(text::Gilroy,type::Location)).term(enriched_text.entities.type)"
}
En este caso, la agregación filter().term() busca el mismo resultado que el ejemplo anterior con las cláusulas filter y aggregation separadas. Sin embargo, los resultados se clasifican de forma diferente
cuando se utiliza la cláusula filter. Puede aprovechar esta diferencia utilizando la cláusula filter() dentro de la cláusula aggregation para filtrar los resultados de una secuencia de expresiones,
tal como se muestra en el ejemplo siguiente.
Empezar con objetos anidados
En los ejemplos anteriores, el valor "matching_counts" representa el número de documentos que coinciden con el filtro y la agregación. Es posible que desee contar cuántos objetos anidados están presentes en
la respuesta de la consulta. La agregación nested() le permite cambiar el conjunto de documentos que se utiliza como entrada a otros términos de agregación.
Por ejemplo, en la consulta siguiente, el segmento nested() selecciona todos los objetos anidados enriched_text.entities como la entrada utilizada por los segmentos filter() y term().
{
"aggregation": "nested(enriched_text.entities).filter(enriched_text.entities.type::Organization).term(enriched_text.entities.text,count:3)"
}
La consulta da como resultado un objeto aggregations que tiene el aspecto siguiente:
{
"aggregations": [
{
"type": "nested",
"path": "enriched_text.entities",
"matching_results": 1993,
"aggregations": [
{
"type": "filter",
"match": "enriched_text.entities.type::Organization",
"matching_results": 645,
"aggregations": [
{
"type": "term",
"field": "enriched_text.entities.text",
"count": 3,
"results": [
{
"key": "IBM",
"matching_results": 36
},
{
"key": "Docker",
"matching_results": 12
},
{
"key": "OpenShift",
"matching_results": 12
}
]
}
]
}
]
}
]
}
El segmento nested() de la consulta ha encontrado 1993 enriched_text.entities objetos anidados. El filtro se ha aplicado a esos objetos y ha encontrado 645 enriched_text.entities de tipo Organization.
Operaciones de terminal
Para la mayoría de los tipos de agregación, cuando se construye una consulta con varias operaciones de agregación, la primera operación se aplica a los documentos. A continuación, la salida de esa operación se utiliza como entrada para la siguiente operación. Sin embargo, un subconjunto de los tipos de agregación son operaciones de terminal. La salida de una operación de terminal no se utiliza como entrada para la siguiente agregación. En su lugar, la salida se devuelve en un grupo discreto.
Para ver un ejemplo de una solicitud que combina tipos de agregación e incluye una agregación que realiza una operación de terminal, consulte el segundo ejemplo para el tipo de agregación average.
tipos de agregación
Se admiten los siguientes tipos de agregaciones:
- medio
- filtrar
- group_by
- histograma
- máx
- mín
- anidado
- par
- sum
- termino
- timeslice
- top_hits
- tendencia
- Tema
- unique_count
Para los tipos de proyecto Recuperación de documentos, cuando no incluye un parámetro de agregación en una solicitud de consulta, se aplica una solicitud de agregación predeterminada. Para obtener más información, consulte Agregaciones de proyectos de recuperación de documentos.
Para obtener más información sobre cómo enviar una consulta, consulte la Discovery .
promedio
Devuelve el valor medio de los valores en el campo especificado en todos los documentos coincidentes.
Sintaxis
average(field)
Ejemplo
| Producto | Precio |
|---|---|
| Serie I | 200 |
| Serie J | 450 |
| Serie X | 325 |
Cuando el tipo de agregación average se aplica a un conjunto de documentos en los que el campo price contiene los valores que se muestran en la Tabla 1, el resultado es 325.
average(price)=325
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
{
"query":"brake",
"aggregation": "term(field:STATE,count:3).average(field:VEH_SPEED).term(field:CITY,count:2)"
}
Para cada estado devuelto por la primera operación de agregación de term, la respuesta muestra la velocidad media del vehículo especificada en los informes de incidencias. Observe que la segunda agregación term utiliza
la salida de la primera agregación term, no la agregación average, como entrada.
{
"matching_results": 9064,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 3,
"results": [
{
"key": "CA",
"matching_results": 1210,
"aggregations": [
{
"type": "average",
"field": "VEH_SPEED",
"value": 26.239653512993264
},
{
"type": "term",
"field": "CITY",
"count": 2,
"results": [
{
"key": "LOS ANGELES",
"matching_results": 77
},
{
"key": "SAN DIEGO",
"matching_results": 66
}
]
}
]
}
filtro
Un modificador que reduce el conjunto de documentos de la consulta de agregación a la que precede.
Sintaxis
filter(field)
Ejemplo
El ejemplo siguiente filtra el conjunto de documentos coincidentes para incluir sólo los documentos que mencionan IBM.
filter(enriched_text.entities.text:IBM)
Cuando se combina con otras agregaciones, filtra el conjunto de documentos coincidentes para incluir sólo los documentos que cumplen la condición que especifique.
{
"query":"brake",
"aggregation": "filter(VEH_SPEED>50).term(field:STATE,count:3).term(field:CITY,count:2)"
}
La respuesta de la consulta muestra las ciudades en las que se producen incidentes que implican los frenos y la velocidad del vehículo es superior a 50.
{
"matching_results": 9064,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "filter",
"match": "VEH_SPEED>50",
"matching_results": 1075,
"aggregations": [
{
"type": "term",
"field": "STATE",
"count": 3,
"results": [
{
"key": "CA",
"matching_results": 176,
"aggregations": [
{
"type": "term",
"field": "CITY",
"count": 2,
"results": [
{
"key": "FONTANA",
"matching_results": 6
},
{
"key": "ALTA LOMA",
"matching_results": 5
}
]
}
]
}
group_by
Separa los resultados en grupos que define.
Sintaxis
group_by(condition:[(condition 1),(condition 2)...])
Cada condición debe especificarse como una expresión válida de lenguaje de consulta de descubrimiento entre paréntesis. Por ejemplo, (age<20) o (flavor:chocolate). El número máximo de condiciones que puede definir
es 50.
Opcionalmente, puede incluir el parámetro relevancy y establecerlo en true para devolver el valor de relevancia del conjunto de documentos que cumplen la condición especificada. Cuando true, los resultados
se ordenan por relevancia. Cuando false, los resultados se ordenan por el número más alto de matching_results.
Ejemplo
La siguiente solicitud busca documentos que mencionen el término engine, y los agrupa por año de fabricación de automóviles. Los documentos se clasifican en 3 grupos, un grupo de informes de incidentes de tránsito que involucran
autos que fueron fabricados antes del 2000, un grupo para autos fabricados en el 2000, y un grupo para autos fabricados después del 2000.
{
"query":"engine",
"aggregation": "group_by(condition:[(YEARTXT<2000),(YEARTXT=2000),(YEARTXT>2000)],relevancy:true)"
}
Los resultados pueden ser parecidos a los siguientes:
{
"type": "group_by",
"results": [
{
"key": "YEARTXT<2000",
"matching_results": 2034,
"relevancy": 1.0,
"total_matching_documents": 2034,
"estimated_matching_results": 2034
},
{
"key": "YEARTXT=2000",
"matching_results": 1738,
"relevancy": 1.0,
"total_matching_documents": 1738,
"estimated_matching_results": 1738
},
{
"key": "YEARTXT>2000",
"matching_results": 32708,
"relevancy": 1.0,
"total_matching_documents": 32708,
"estimated_matching_results": 32708
}
]
}
histograma
Crea segmentos de intervalos numéricos para clasificar documentos.
Sintaxis
histogram({field},{interval})
Utiliza valores de un campo numérico individual para describir la categoría. El campo que se utiliza para crear el histograma debe tener un tipo de datos de número, como integer, float, double o date.
No se admiten tipos de números no numéricos, como " string ". Por ejemplo, "price": 1.30 es un valor numérico que funciona, y "price": "1.30" es una cadena, por
lo que no funciona.
Utilice el argumento " interval " para definir el tamaño de las secciones en las que se dividirán los resultados. Los valores de intervalo deben ser enteros, números no negativos. Elija un valor que tenga sentido para
segmentar los valores típicos del campo.
Los histogramas pueden procesar valores decimales especificados en un campo, pero el intervalo debe ser un número entero.
Opcionalmente, puede incluir un nombre personalizado incluyendo un parámetro name.
Ejemplo
Por ejemplo, si su conjunto de datos incluye el precio de varios artículos, como: “price”: 1.30, “price”: 1.99 y “price”: 2.99, puede utilizar intervalos de 1, para que vea todo lo que está
agrupado en el rango 1 - 2, y 2 y 3. No desea utilizar un intervalo de 100 porque, a continuación, todos los datos terminan en el mismo segmento.
histogram(product_price,interval:1)
máx
Devuelve el valor más alto en el campo especificado en todos los documentos coincidentes.
Sintaxis
max(field)
Ejemplo
| Producto | Precio |
|---|---|
| Serie I | 200 |
| Serie J | 450 |
| Serie X | 325 |
Cuando el tipo de agregación max se aplica a un conjunto de documentos en los que el campo price contiene los valores que se muestran en la Tabla 2, el resultado es 450.
max(price)=450
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
mín
Devuelve el valor más bajo en el campo especificado en todos los documentos coincidentes.
Sintaxis
min(field)
Ejemplo
| Producto | Precio |
|---|---|
| Serie I | 200 |
| Serie J | 450 |
| Serie X | 325 |
Cuando el tipo de agregación min se aplica a un conjunto de documentos en los que el campo price contiene los valores que se muestran en la Tabla 3, el resultado es 200.
min(price)=200
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
anidado
Aplicar nested antes de una consulta de agregación restringe la agregación al área de los resultados que se especifican.
Por ejemplo, nested(enriched_text.entities) significa que solo los componentes e enriched_text.entities es de cualquier resultado se utilizan para agregar.
El ejemplo siguiente comprueba cuántas menciones se devuelven por tipo de modelo.
nested(enriched_text.entities).term(enriched_text.entities.model_name)
El resultado muestra que hay un total de 50 entidades reconocidas y todas ellas son de tipo NLU.
"aggregations": [
{
"type": "nested",
"path": "enriched_text.entities",
"matching_results": 50,
"aggregations": [
{
"type": "term",
"field": "enriched_text.entities.model_name",
"results": [
{
"key": "natural_language_understanding",
"matching_results": 50
}
]
}
]
}
]
Para ver otro ejemplo, consulte Inicio con objetos anidados.
par
Analiza las relaciones entre dos campos.
Sintaxis
pair(first:{aggregation},second:{aggregation})
El primer y segundo valores {aggregation} deben ser uno de los siguientes tipos de agregación:
termgroup_byhistogramtimeslice
El parámetro relevancy de la agregación term o group_by se ignora. El tipo de agregación pair calcula los valores de relevancia utilizando combinaciones de conjuntos de documentos a partir
de los resultados de las dos agregaciones.
Sólo se puede utilizar una agregación de par por solicitud de consulta y no se puede combinar con ninguna otra agregación.
Ejemplo
Por ejemplo, puede especificar term(model_name) como la primera agregación y term(component_name) como la segunda. Cada una de las agregaciones devuelve los valores siguientes como claves de conjuntos de documentos
agregados:
- term (nombre_modelo): Accord, CR-V
- term (nombre_componente): motor, freno, radiador
Los valores de relevancia calculados de las combinaciones de cada uno de los conjuntos de documentos pueden tener este aspecto:
- Motor Accord x
- Acuerdo x freno
- Radiador Accord x
- Motor CR-V x
- CR-V x freno
- Radiador CR-V x
La respuesta define una matriz bidimensional de resultados de agregación, que se puede representar en una tabla.
| Modelo de coche | Componente: motor | Componente: freno | Componente: radiador |
|---|---|---|---|
| Acuerdo | Motor Accord x | Acuerdo x freno | Radiador Accord x |
| CR-V | Motor CR-V x | CR-V x freno | Radiador CR-V x |
Cada matriz de columnas y filas de la tabla se ordena en el mismo orden que los resultados de la primera y segunda agregaciones. Por ejemplo, si especifica la agregación term como primer argumento, las matrices de columnas resultantes
se ordenan por frecuencia de términos. Si utiliza la agregación timeslice como segundo argumento, las matrices de filas se ordenan por fecha u hora.
sum
Añade los valores del campo especificado en todos los documentos coincidentes.
Sintaxis
sum(field)
Ejemplo
| Producto | Precio |
|---|---|
| Serie I | 200 |
| Serie J | 450 |
| Serie X | 325 |
Cuando se aplica el tipo de agregación sum a un conjunto de documentos en el que el campo price contiene los valores que se muestran en la Tabla 6, el resultado es 975.
sum(price)=975
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
plazo
Indica la frecuencia de un término o conjunto de términos en un conjunto de documentos consultados.
Sintaxis
term(field:{field_name})
Opcionalmente, puede especificar los siguientes parámetros:
-
count: Especifica el número máximo de términos a devolver. -
name: opcionalmente, puede incluir un nombre personalizado. No se devuelve si se incluye información de relevancia en la solicitud. -
relevancy: valor booleano que indica si se debe incluir información de relevancia en el resultado. Puede utilizar la relevancia para obtener una puntuación que indique el nivel de relevancia entre el término y las palabras clave de la consulta. Este parámetro está configurado de forma predeterminada como "false". Si se establece en true, también se devuelven los campos siguientes:total_matching_documents: número de documentos de la colección donde se menciona el término en el campo especificado.estimated_matching_results: número de documentos que se estima que tienen el término en el campo especificado en el conjunto de documentos devueltos por la consulta.
Ejemplo
El ejemplo siguiente devuelve el texto de las entidades reconocidas en el documento y especifica que se devuelva un máximo de 10 términos.
Por ejemplo:
term(enriched_text.entities.text,count:10)
Cuando relevancy se establece en true, se muestra una puntuación de relevancia en los resultados. La relevancia mide el nivel de exclusividad del recuento de frecuencia en comparación con otros documentos que coinciden
con la consulta. Si la relevancia muestra 2.0, significa que el número de veces que los dos puntos de datos se cruzan es 2 veces mayor que el esperado.
Para obtener más ejemplos, consulte Agrupación de documentos y Combinación de tipos de agregación.
timeslice
Se trata de un histograma especializado que utiliza fechas para crear segmentos de intervalo.
Sintaxis
La sintaxis es timeslice({field},{interval},{time_zone}).
- El campo que especifique debe tener un tipo de datos
date. Para obtener más información sobre el campo de fecha, consulte Cómo se manejan las fechas. - Los valores de intervalo válidos son
1secondo{n}seconds,1minuteo{n}minutes,1houro{n}hours,1dayo{n}days,1weeko{n}weeks,1montho{n}months, y1yearo{n}yearsdonde {n} es un número. - Opcionalmente, puede incluir un nombre personalizado incluyendo un parámetro
name.
Ejemplo
El ejemplo siguiente muestra el número de coincidencias para cada valor de día.
timeslice(field:DATEA,interval:1day)
Los resultados son los siguientes.
"aggregations": [
{
"type": "timeslice",
"field": "DATEA",
"interval": "1d",
"results": [
{
"key": 1262304000000,
"key_as_string": "2010-01-01T00:00:00.000Z",
"matching_results": 5
},
{
"key": 1262390400000,
"key_as_string": "2010-01-02T00:00:00.000Z",
"matching_results": 18
},
{
"key": 1262476800000,
"key_as_string": "2010-01-03T00:00:00.000Z",
"matching_results": 38
},
{
"key": 1262563200000,
"key_as_string": "2010-01-04T00:00:00.000Z",
"matching_results": 66
}
top_hits
Devuelve los documentos clasificados por la puntuación de la consulta o el enriquecimiento. Se puede utilizar con cualquier parámetro o agregación.
Sintaxis
{aggregation}.top_hits({n})
Ejemplo
El ejemplo siguiente devuelve el mayor acierto para el término halt por ciudad.
{
"query":"halt",
"aggregation": "term(CITY).top_hits(1)"
}
La respuesta contiene los principales resultados de la consulta para el término halt agrupados por ciudades mencionadas en documentos donde el término es más mencionado. Se devuelven diez resultados de forma predeterminada. Para
cada una de las 10 ciudades, el documento con la puntuación más alta se devuelve como objeto hit. El contenido de cada hit de la matriz hits coincide con el contenido de cada result de
la matriz results. Sólo el orden de los resultados es diferente.
"aggregations": [
{
"type": "term",
"field": "CITY",
"results": [
{
"key": "LOS ALTOS",
"matching_results": 3,
"aggregations": [
{
"type": "top_hits",
"size": 1,
"hits": {
"matching_results": 3,
"hits": [
{
"document_id": "2bed19a9069442fd82542827ebe260d5_7015",
...
}
]
}
}
]
},
{
"key": "ANDOVER",
"matching_results": 2,
"aggregations": [
{
"type": "top_hits",
"size": 1,
"hits": {
"matching_results": 2,
"hits": [
{
"document_id": "2bed19a9069442fd82542827ebe260d5_18329",
...
}
]
}
}
]
},
...
{
"key":"ACTON",
"maatching_results": 1,
"aggregations": []
}
...
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
tendencia
Detecta cambios bruscos e inesperados en la frecuencia de un valor de palabra clave en un periodo de tiempo especificado basándose en los cambios de frecuencia pasados del valor de palabra clave.
Sytnax
trend(facet:{aggregation},time_segments:{aggregation})
La primera agregación (facet) debe ser uno de los siguientes tipos de agregaciones:
termgroup_by
El parámetro relevancy de la agregación term o group_by se ignora.
La segunda agregación (time_segments) debe ser una agregación de tipo timeslice.
De forma alternativa, puede incluir los parámetros siguientes:
show_estimated_matching_results:true: Indica si se debe incluir la información deestimated_matching_resultsen el resultado. Este campo contiene el número de documentos que se estima que tienen el término en el campo especificado o que cumplen las condiciones de la agregación especificada para el intervalo de tiempo especificado en el conjunto de documentos que devuelve la consulta.show_total_matching_documents:true: Indica si se debe incluir la información detotal_matching_documentsen el resultado. Este campo contiene el número de documentos de la colección donde el término se menciona en el campo especificado o se cumple la condición.
Sólo se puede utilizar una agregación de tendencia por solicitud de consulta y no se puede combinar con ninguna otra agregación.
Ejemplo
El ejemplo siguiente calcula el indicador de tendencia o el índice de tendencia utilizando combinaciones de resultados de las agregaciones siguientes:
- término (sabor): vainilla, chocolate, menta
- Timeslice (date, 1month): Ene 2020, Feb 2020, Mar 2020, Abr 2020, Mayo 2020, Jun 2020
trend( facet: aggregation(<parameter>...), time_segments: timeslice(<parameter>...)),
show_estimated_matching_results: <true_or_false>, show_total_matching_documents: <true_or_false> )
La matriz resultante se puede representar en una tabla.
| Mes de 2020 | Sabor: vainilla | Sabor: chocolate | Sabor: menta |
|---|---|---|---|
| Ene | vainilla x Jan | Chocolate x Ene | Menta x Jan |
| Feb | vainilla x Feb | Chocolate x Feb | Menta x Feb |
| Mar | vainilla x Mar | Chocolate x Mar | Menta x Mar |
| Abr | vainilla x abr | chocolate x abr | Menta x Abr |
| Mayo | vainilla x mayo | Chocolate x mayo | Menta x Mayo |
| Jun | vainilla x Jun | Chocolate x Jun | Menta x Jun |
En la siguiente respuesta de ejemplo, la información clave es el valor trend_indicator. El indicador de tendencia mide la proporción de aumento de la frecuencia de un valor de faceta determinado para un intervalo de tiempo determinado
en comparación con la frecuencia media esperada. La frecuencia promedio exceptuada se calcula basándose en los cambios en las frecuencias de intervalo de tiempo pasadas del valor de faceta dado, utilizando una media aritmética ponderada.
Si el valor residual estandarizado es menor que -2, la frecuencia observada es menor que la frecuencia esperada. Si es mayor que 2, la frecuencia observada es mayor que la frecuencia esperada. Si el residuo estandarizado es mayor o menor que la frecuencia esperada por 3 o más, entonces algo inusual está sucediendo y sugiere que podría haber una anomalía que vale la pena investigar.
Por ejemplo, el número esperado de envíos de comentarios para el tipo vanilla en mayo se calcula a partir del número de envíos de comentarios que se han recibido anteriormente (de Ene a Abr). El resultado es 5.341.
El número real de envíos de comentarios en mayo es 10. Los resultados indican que el sabor de vainilla obtuvo aproximadamente el doble del número de envíos de comentarios esperado. El valor residual tipificado es 2.016,
que es mayor que el esperado, pero no de forma inusual.
{
"aggregations": [
{
"type": "trend",
"facet": "term(flavor),",
"time_segments": "timeslice(date, 1month)",
"show_estimated_matching_results": true,
"show_total_matching_documents": true,
"results": [
{
"aggregations": [
{
"type": "term",
"field": "flavor",
"results": [
{
"key": "vanilla",
"matching_results": 36,
"aggregations": [
{
"type": "timeslice",
"field": "date",
"results": [
{
"key": 1577836800000,
"key_as_string": "2020-01-01T00:00:00.000Z",
"matching_results": 4,
"trend_indicator": 0.0,
"total_matching_documents": 7,
"estimated_matching_results": 0.0
},
{
"key": 1588291200000,
"key_as_string": "2020-05-01T00:00:00.000Z",
"matching_results": 10,
"trend_indicator": 2.016106745,
"total_matching_documents": 12,
"estimated_matching_results": 5.340760209
},
{
"key": 1590969600000,
"key_as_string": "2020-06-01T00:00:00.000Z",
"matching_results": 5,
"trend_indicator": -0.763212711,
"total_matching_documents": 11,
"estimated_matching_results": 7.022515985
}
]
}
]
},
{
"key": "chocolate",
"matching_results": 10,
"aggregations": [...]
},
{
"key": "mint",
"matching_results": 25,
"aggregations": [...]
...
}
tema
Detecta cuánto se desvía la frecuencia de un valor de palabra clave del promedio esperado para el periodo de tiempo especificado. Este tipo de agregación no utiliza datos de periodos de tiempo anteriores. Calcula un índice utilizando los promedios de recuentos de frecuencia de otros valores de palabra clave para el periodo de tiempo especificado.
Sintaxis
topic(facet:{aggregation},time_segments:{aggregation})
La primera agregación (facet) debe ser uno de los siguientes tipos de agregaciones:
termgroup_by
El parámetro relevancy de la agregación term o group_by se ignora.
La segunda agregación (time_segments) debe ser una agregación de tipo timeslice.
De forma alternativa, puede incluir los parámetros siguientes:
show_estimated_matching_results:true: Indica si se debe incluir la información deestimated_matching_resultsen el resultado. Este campo contiene el número de documentos que se estima que tienen el término en el campo especificado o que cumplen las condiciones de la agregación especificada para el intervalo de tiempo especificado en el conjunto de documentos que devuelve la consulta.show_total_matching_documents:true: Indica si se debe incluir la información detotal_matching_documentsen el resultado. Este campo contiene el número de documentos de la colección donde el término se menciona en el campo especificado o se cumple la condición.
Sólo se puede utilizar una agregación de tema por solicitud de consulta y no se puede combinar con ninguna otra agregación.
Ejemplo
{
"query: like",
"aggregation": "topic( facet: term(flavor), time_segments: timeslice(date, 1month), show_estimated_matching_results: true, show_total_matching_documents: true )"
}
Con el mismo conjunto de datos y agregación que se utiliza en el ejemplo de agregación de términos, los resultados pueden tener el aspecto siguiente.
Tenga en cuenta que los valores de topic_indicator son diferentes de los valores de trend_indicator devueltos por la agregación de trend. Mientras que ambos se calculan a partir de las frecuencias reales
y esperadas, difieren porque sus frecuencias esperadas se calculan de manera diferente. En la agregación trend, la frecuencia esperada de los envíos de comentarios para el helado con sabor a vainilla en mayo se calcula a partir
del número de envíos de comentarios recibidos para vainilla anteriormente (de enero a abril) y el número total de envíos de comentarios recibidos para todos los sabores en mayo. Sin embargo, en la agregación topic, la frecuencia
esperada de envíos de comentarios para el helado con sabor a vainilla en mayo se calcula a partir del número de envíos de comentarios recibidos para la vainilla y el número total de envíos de comentarios recibidos para todos los sabores
en mayo. En este ejemplo, el resultado de frecuencia esperado es 12.169, la frecuencia real es 10 y topic_indicator es -0.621777032.
{
"aggregations": [
{
"type": "topic",
"facet": "term(flavor)",
"time_segments": "timeslice(date, 1month)",
"show_estimated_matching_results": true,
"show_total_matching_documents": true,
"results": [
{
"aggregations": [
{
"type": "term",
"field": "flavor",
"results": [
{
"key": "vanilla",
"matching_results": 36,
"aggregations": [
{
"type": "timeslice",
"field": "date",
"results": [
{
"key": 1577836800000,
"key_as_string": "2020-01-01T00:00:00.000Z",
"matching_results": 4,
"topic_indicator": -0.027972712,
"total_matching_documents": 7,
"estimated_matching_results": 4.056338028
},
{
"key": 1588291200000,
"key_as_string": "2020-05-01T00:00:00.000Z",
"matching_results": 10,
"topic_indicator": -0.621777032,
"total_matching_documents": 12,
"estimated_matching_results": 12.16901408
},
{
"key": 1590969600000,
"key_as_string": "2020-06-01T00:00:00.000Z",
"matching_results": 5,
"topic_indicator": -0.787665504,
"total_matching_documents": 11,
"estimated_matching_results": 7.098591549
}
]
}
]
},
{
"key": "chocolate",
...
},
{
"key": "mint",
...
}
}
unique_count
Devuelve un recuento de las instancias exclusivas del campo especificado en la recopilación.
Sintaxis
unique_count(field)
Ejemplo
La siguiente agregación solicita el número de tipos de enriquecimiento exclusivos que se reconocen en la consulta.
unique_count(enriched_text.keyword.type)
El resultado indica que hay 17 resultados coincidentes. En esos 17 documentos, se mencionan 14 tipos de entidad.
{
"matching_results": 17,
"retrieval_details": {
"document_retrieval_strategy": "untrained"
},
"aggregations": [
{
"type": "unique_count",
"field": "enriched_text.entities.type",
"value": 14.0
}
],
"results": []
}
Este tipo de agregación realiza una operación de terminal. Cuando se combina con otras agregaciones, la salida no se utiliza como entrada para la siguiente agregación. La salida se devuelve en un grupo discreto.
En el ejemplo siguiente, el parámetro de agregación solicita que los resultados muestren las primeras 45 entidades mencionadas con más frecuencia. Por entidad, indica cuántos documentos mencionan el término y cuántas veces en total se produce el término.
term(enriched_text.entities.text,count:45).unique_count(enriched_text.entities.type)
Los resultados incluyen varias agregaciones como, por ejemplo, el siguiente grupo para el término PostgreSQL. La agregación indica que el término aparece en 4 documentos y se menciona 12 veces.
{
"key": "PostgreSQL",
"matching_results": 4,
"aggregations": [
{
"type": "unique_count",
"field": "enriched_text.entities.type",
"value": 12.0
}
]
}