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.

Ejemplo de estructura de consulta de agregación que muestra max como tipo de agregación y order.total como agrupación de
de
de estructura de consulta de agregación*

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:

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

Precios de los productos
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

Precios de los productos
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

Precios de los productos
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:

  • term
  • group_by
  • histogram
  • timeslice

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.

Ejemplo de agregación de pares
Esta tabla tiene cabeceras de fila y columna. Las cabeceras de fila identifican modelos de coche. Las cabeceras de columna identifican los componentes del coche. Cada celda calcula una puntuación de relevancia multiplicando el valor de relevancia del modelo de coche (fila) por el valor de relevancia del componente de coche (cabecera).
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

Precios de los productos
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 1second o {n}seconds, 1minute o {n}minutes, 1hour o {n}hours, 1day o {n}days, 1week o {n}weeks, 1month o {n}months, y 1year o {n}years donde {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:

  • term
  • group_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 de estimated_matching_results en 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 de total_matching_documents en 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.

Ejemplo de agregación de tendencias
Esta tabla tiene cabeceras de fila y columna. Las cabeceras de fila identifican meses del año 2020. Las cabeceras de columna identifican los sabores de helado. Cada celda calcula una puntuación de relevancia multiplicando el valor de relevancia de mes (fila) por el valor de relevancia de tipo (cabecera).
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:

  • term
  • group_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 de estimated_matching_results en 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 de total_matching_documents en 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
    }
  ]
}