Abfrageaggregationen

Mit Aggregationen können Sie Ergebnisse gruppieren, analysieren oder vergleichen, die von einer Abfrageanforderung zurückgegeben werden.

Eine Aggregation wird durch einen Parameter aggregation definiert, den Sie in der Abfrage-API angeben können. Die Eingabe für den Aggregationsparameter ist die Dokumentgruppe, die vom Parameter query, filter oder natural_language_query zurückgegeben wird, der als separater Parameter in derselben Abfrageanforderung angegeben wird. Andernfalls wird die Aggregation auf alle Dokumente im Projekt angewendet.

Sie können eine Aggregation verwenden, um Berechnungen aus Werten in der Ergebnisdokumentgruppe durchzuführen. Um beispielsweise Informationen zum höchsten Dollarbetrag im Feld order.total der Dokumente abzurufen, die als Abfrageergebnisse zurückgegeben werden, verwenden Sie max(order.total) als Wert des Parameters aggregation.

Example aggregation query structure that shows max as the aggregation type and order.total as a grouping of field details
Aggregation query structure example

Der Aggregationsparameter gibt Daten zu dem Feld mit dem höchsten Wert zurück.

"aggregations": [
  {
    "type": "max",
    "field": "order.total",
    "value": 100668.00
  }
]

Dokumente gruppieren

Zusätzlich zu Berechnungen können Sie eine Aggregation verwenden, um Dokumente in der Ergebnismenge zu gruppieren, die bestimmten Werten entsprechen, sodass Sie sie zählen oder weiter analysieren können. Sie können beispielsweise eine Aggregation verwenden, um eine Gruppe von Berichten zu Datenverkehrsvorfällen nach Dokumenten zu durchsuchen, die den Begriff brake enthalten. Und in den zurückgegebenen Dokumenten finden Sie Berichte aus den USA mit den relevantesten Erwähnungen des Begriffs.

In der folgenden Beispielanforderung ist der Zählerparameter enthalten, der nur 3 Aggregationsergebnisse zurückgibt, damit das Beispiel einfacher verfolgt werden kann.

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3,relevancy:true)"
}

Die Ausgabe des Aggregationsparameters wird in einem aggregations-Objekt zurückgegeben, das vor dem results-Objekt angezeigt wird, das die Abfrageergebnisse enthält. Im Objekt aggregations können maximal 50.000 Werte für eine einzelne Abfrage zurückgegeben werden.

Das resultierende aggregations-Objekt enthält Übersichtsdaten zu den Abfrageergebnissen. In diesem Beispiel zeigt es zum Beispiel, dass Verkehrsvorfallberichte aus New York, Kalifornien und Florida die relevantesten Erwähnungen des Begriffs brake enthalten.

{
  "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": []

Aggregationstypen kombinieren

Es gibt verschiedene Aggregationstypen, mit denen Sie die Abfrageergebnisse analysieren oder gruppieren können. Außerdem können Sie mehrere Aggregationen in einer Anforderung kombinieren, um gezieltere Analysen durchzuführen.

Das folgende Beispiel zeigt eine Anforderung, die aus zwei Begriffsoperatoren besteht. Die erste Begriffsaggregation gruppiert die Eingabedokumente nach US-STATE-Werten und wählt 3 Gruppen aus. Die zweite Begriffsaggregation gilt für jede dieser drei Gruppen und gruppiert sie weiter nach dem Wert von CITY. Nur 2 dieser CITY-Untergruppen werden pro STATE-Gruppe zurückgegeben.

Der Relevanzparameter wird ausgeschlossen, damit die Ergebnisse leichter lesbar sind.

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3).term(field:CITY,count:2)"
}

Die Antwort enthält Informationen zur Stadt aus den einzelnen Bundesstaaten.

{
  "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": []

Die Reihenfolge, in der Sie die Aggregationen angeben, ist von Bedeutung. Wenn Sie beispielsweise die Reihenfolge der Begriffsaggregationen aus dem vorherigen Beispiel umkehren, erhalten Sie unterschiedliche Ergebnisse.

{
    "query":"brake",
    "aggregation": "term(field:CITY,count:3).term(field:STATE,count:1)"
}

Die neue Reihenfolge produziert Ergebnisse, die Chicago, eine Stadt, die nicht in der vorherigen Gruppe von Ergebnissen enthalten war. Wenn die Anforderung mit einer Gruppierung nach Bundesstaat beginnt, wird Illinois, das nur eine Stadt mit einer hohen Anzahl von Berichten über Verkehrsvorfälle hat, nicht in die Ergebnisse aufgenommen. New York und Florida, die beide mehr als eine Stadt mit vielen Vorfallberichten haben, produzieren eine höhere Anzahl von landesweiten Übereinstimmungen und wurden daher zurückgegeben. Wenn Sie zuerst nach Stadt gruppieren, ändern sich die Ergebnisse.

{
  "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": []

Verwenden von Aggregationen zum Untersuchen von Aufbereitungen

Die Aggregation term() ist besonders nützlich für die Analyse von Ergebnissen, um herauszufinden, wie viele Aufbereitungen in den Dokumenten erkannt werden. Um beispielsweise zu zählen, wie oft jeder Entitätstyp in den gefilterten Dokumenten erkannt wird, können Sie die folgenden Abfrageparameter übergeben:

{
  "filter": "enriched_text.entities:(text::Gilroy,type::Location)",
  "aggregation": "term(enriched_text.entities.type)"
}

Die Abfrage wählt zuerst die Dokumente aus, die mindestens eine Entität des Typs Location haben und deren Text Gilroy ist. Diese Aktion gibt 3 Dokumente zurück. Aus den zurückgegebenen Dokumenten zählt die Aggregation dann die Anzahl der Dokumente, in denen jeder Entitätstyp vorkommt.

{
  "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
        }
      ]
    }
  ]
}

Alle drei übereinstimmenden Dokumente haben den Entitätstyp Location und Person ("matching_results": 3). Nur 2 der übereinstimmenden Dokumente haben jedoch den Entitätstyp Company.

Standardmäßig werden die ersten 10 Übereinstimmungen zurückgegeben, sortiert nach Relevanz. Sie können die Anzahl der Ergebnisse ändern, indem Sie der Aggregation den Parameter count hinzufügen.

{
  "filter": "enriched_text.entities:(text::Gilroy,type::Location)",
  "aggregation": "term(enriched_text.entities.type,count:20)"
}

Filter hinzufügen

Verwenden Sie die filter() in der Aggregationsklausel, um Ergebnisse zu filtern. Sie können beispielsweise denselben Filter angeben, der im vorherigen Beispiel direkt in der Klausel aggregation separat übergeben wurde.

{
  "aggregation": "filter(enriched_text.entities:(text::Gilroy,type::Location)).term(enriched_text.entities.type)"
}

In diesem Fall findet die Aggregation filter().term() dasselbe Ergebnis wie im vorherigen Beispiel mit den separaten Klauseln filter und aggregation. Ergebnisse werden jedoch anders eingestuft, wenn die Klausel filter verwendet wird. Sie können diesen Unterschied nutzen, indem Sie die Klausel filter() in der Klausel aggregation verwenden, um Ergebnisse aus einer Folge von Ausdrücken zu filtern, wie im nächsten Beispiel gezeigt.

Mit verschachtelten Objekten beginnen

In den vorherigen Beispielen stellt der Wert "matching_counts" die Anzahl der Dokumente dar, die dem Filter und der Aggregation entsprechen. Sie können zählen, wie viele verschachtelte Objekte in der Abfrageantwort vorhanden sind. Mit der Aggregation nested() können Sie die Gruppe der Dokumente ändern, die als Eingabe für andere Aggregationsbegriffe verwendet werden.

In der folgenden Abfrage wählt das Segment nested() beispielsweise alle verschachtelten enriched_text.entities-Objekte als Eingabe aus, die von den Segmenten filter() und term() verwendet wird.

{
  "aggregation": "nested(enriched_text.entities).filter(enriched_text.entities.type::Organization).term(enriched_text.entities.text,count:3)"
}

Die Abfrage ergibt ein aggregations-Objekt, das wie folgt aussieht:

{
  "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
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Das Segment nested() der Abfrage hat 1993 enriched_text.entities verschachtelte Objekte gefunden. Der Filter wurde auf diese Objekte angewendet und fand 645 enriched_text.entities vom Typ Organization.

Terminaloperationen

Wenn Sie bei den meisten Aggregationstypen eine Abfrage mit mehreren Aggregationsoperationen erstellen, wird die erste Operation auf die Dokumente angewendet. Anschließend wird die Ausgabe dieser Operation als Eingabe für die nächste Operation verwendet. Eine Untergruppe der Aggregationstypen sind jedoch Terminaloperationen. Die Ausgabe einer Terminaloperation wird nicht als Eingabe für die nächste Aggregation verwendet. Stattdessen wird die Ausgabe in einer diskreten Gruppe zurückgegeben.

Ein Beispiel für eine Anforderung, die Aggregationstypen kombiniert und eine Aggregation enthält, die eine Terminaloperation ausführt, enthält das zweite Beispiel für den Aggregationstyp average.

Aggregationstypen

Die folgenden Arten von Aggregationen werden unterstützt:

Wenn Sie bei Projekttypen für Dokumentabruf keinen Aggregationsparameter in eine Abfrageanforderung einschließen, wird eine Standardaggregationsanforderung angewendet. Weitere Informationen finden Sie unter Dokumentabrufprojekt-Aggregationen.

Weitere Informationen zum Übergeben einer Abfrage finden Sie in der Discovery -API-Referenz.

Durchschnitt

Gibt den Durchschnitt der Werte für das angegebene Feld in allen übereinstimmenden Dokumenten zurück.

Syntax

average(field)

Beispiel

Preisbeispiele für Produkte
Produkt Preis
I-Serie 200
Serie J 450
X-Serie 325

Wenn der Aggregationstyp average auf mehrere Dokumente angewendet wird, in denen das Feld price die Werte enthält, die in Tabelle 1 angezeigt werden, lautet das Ergebnis 325.

average(price)=325

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

{
    "query":"brake",
    "aggregation": "term(field:STATE,count:3).average(field:VEH_SPEED).term(field:CITY,count:2)"
}

Für jeden von der ersten term-Aggregationsoperation zurückgegebenen Status zeigt die Antwort die durchschnittliche Fahrzeuggeschwindigkeit an, die in den Vorfallsberichten angegeben ist. Beachten Sie, dass die zweite term-Aggregation die Ausgabe der ersten term-Aggregation und nicht die average-Aggregation als Eingabe verwendet.

{
  "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
                }
              ]
            }
          ]
        }

Filter

Ein Modifikator, der die Dokumentmenge der vorangehenden Aggregationsabfrage einschränkt.

Syntax

filter(field)

Beispiel

Im folgenden Beispiel wird die übereinstimmende Dokumentgruppe gefiltert, um nur Dokumente einzuschließen, in denen IBM erwähnt wird.

filter(enriched_text.entities.text:IBM)

Filtert in Kombination mit anderen Aggregationen die übereinstimmenden Dokumente so, dass sie nur die Dokumente enthalten, die die von Ihnen angegebene Bedingung erfüllen.

{
    "query":"brake",
    "aggregation": "filter(VEH_SPEED>50).term(field:STATE,count:3).term(field:CITY,count:2)"
}

Die Abfrageantwort zeigt Städte an, in denen Vorfälle auftreten, die die Bremsen betreffen, und die Fahrzeuggeschwindigkeit über 50 liegt.

{
  "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

Teilt Ergebnisse in Gruppen auf, die Sie definieren.

Syntax

group_by(condition:[(condition 1),(condition 2)...])

Jede Bedingung muss als gültiger Discovery Query Language-Ausdruck in runden Klammern angegeben werden. Beispiel: (age<20) oder (flavor:chocolate). Sie können maximal 50 Bedingungen definieren.

Sie können optional den Parameter relevancy einschließen und auf true setzen, um den Relevanzwert der Gruppe von Dokumenten zurückzugeben, die die angegebene Bedingung erfüllen. Bei true werden die Ergebnisse nach Relevanz sortiert. Bei false werden die Ergebnisse nach der höchsten Anzahl von matching_results sortiert.

Beispiel

Die folgende Anforderung sucht nach Dokumenten, die den Begriff engine enthalten, und gruppiert sie nach dem Jahr der Automobilherstellung. Die Dokumente sind in drei Gruppen eingeteilt: eine Gruppe von Berichten über Verkehrsstörungen, die Fahrzeuge betreffen, die vor 2000 hergestellt wurden, eine Gruppe für Fahrzeuge, die im Jahr 2000 hergestellt wurden, und eine Gruppe für Fahrzeuge, die nach 2000 hergestellt wurden.

{
    "query":"engine",
    "aggregation": "group_by(condition:[(YEARTXT<2000),(YEARTXT=2000),(YEARTXT>2000)],relevancy:true)"
}

Die Ergebnisse könnten wie folgt aussehen:

{
  "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
    }
  ]
}

Histogramm

Erstellt numerische Intervallsegmente, um Dokumente zu kategorisieren.

Syntax

histogram({field},{interval})

Verwendet Feldwerte aus einem einzelnen numerischen Feld, um die Kategorie zu beschreiben. Das Feld, das zum Erstellen des Histogramms verwendet wird, muss einen Zahlendatentyp wie integer, float, double oder date haben.

Nicht nummerierte Typen wie string werden nicht unterstützt. Zum Beispiel ist "price": 1.30 ein Zahlenwert, der funktioniert, und "price": "1.30" ist eine Zeichenkette, also funktioniert es nicht.

Verwenden Sie das Argument interval, um die Größe der Abschnitte festzulegen, in die die Ergebnisse aufgeteilt werden sollen. Intervallwerte müssen ganze, nicht negative Zahlen sein. Wählen Sie einen Wert aus, der für die Segmentierung der typischen Werte aus dem Feld sinnvoll ist.

Histogramme können Dezimalwerte verarbeiten, die in einem Feld angegeben sind, aber das Intervall muss eine ganze Zahl sein.

Sie können optional einen angepassten Namen einschließen, indem Sie einen Parameter name einschließen.

Beispiel

Wenn Ihr Datensatz beispielsweise den Preis mehrerer Artikel enthält, wie: “price”: 1.30, “price”: 1.99 und “price”: 2.99, können Sie Intervalle von 1 verwenden, sodass Sie alles sehen, was in den Bereichen 1 - 2, 2 und 3 gruppiert ist. Sie möchten kein Intervall von 100 verwenden, da dann alle Daten in demselben Segment enden.

histogram(product_price,interval:1)

max

Gibt den höchsten Wert für das angegebene Feld in allen übereinstimmenden Dokumenten zurück.

Syntax

max(field)

Beispiel

Preisbeispiele für Produkte
Produkt Preis
I-Serie 200
Serie J 450
X-Serie 325

Wenn der Aggregationstyp max auf eine Gruppe von Dokumenten angewendet wird, in denen das Feld price die in Tabelle 2 aufgeführten Werte enthält, lautet das Ergebnis 450.

max(price)=450

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

min

Gibt den niedrigsten Wert für das angegebene Feld in allen übereinstimmenden Dokumenten zurück.

Syntax

min(field)

Beispiel

Preisbeispiele für Produkte
Produkt Preis
I-Serie 200
Serie J 450
X-Serie 325

Wenn der Aggregationstyp min auf mehrere Dokumente angewendet wird, in denen das Feld price die Werte enthält, die in Tabelle 3 angezeigt werden, lautet das Ergebnis 200.

min(price)=200

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

verschachtelt

Wenn Sie nested vor einer Aggregationsabfrage anwenden, wird die Aggregation auf den Bereich der angegebenen Ergebnisse beschränkt.

Zum Beispiel bedeutet nested(enriched_text.entities), dass nur die enriched_text.entities-Komponenten eines Ergebnisses für den Abgleich verwendet werden.

Im folgenden Beispiel wird geprüft, wie viele Erwähnungen pro Modelltyp zurückgegeben werden.

nested(enriched_text.entities).term(enriched_text.entities.model_name)

Das Ergebnis zeigt, dass insgesamt 50 erkannte Entitäten vorhanden sind und alle vom Typ NLU sind.

"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
          }
        ]
      }
    ]
  }
]

Ein weiteres Beispiel finden Sie unter Mit verschachtelten Objekten beginnen.

Paar

Analysiert Beziehungen zwischen zwei Feldern.

Syntax

pair(first:{aggregation},second:{aggregation})

Der erste und zweite {aggregation}-Wert müssen einen der folgenden Aggregationstypen aufweisen:

  • term
  • group_by
  • histogram
  • timeslice

Der Parameter relevancy aus der Aggregation term oder group_by wird ignoriert. Der Aggregationstyp pair berechnet Relevanzwerte mithilfe von Kombinationen von Dokumentgruppen aus den Ergebnissen der beiden Aggregationen.

Pro Abfrageanforderung kann nur eine Paaraggregation verwendet werden, die nicht mit anderen Aggregationen kombiniert werden kann.

Beispiel

Sie können beispielsweise term(model_name) als erste Aggregation und term(component_name) als zweite Aggregation angeben. Jede der Aggregationen gibt die folgenden Werte als Schlüssel von aggregierten Dokumentgruppen zurück:

  • term (modellname): Accord, CR-V
  • term (Komponentenname): engine, brake, Kühler

Die berechneten Relevanzwerte von Kombinationen der einzelnen Dokumentgruppen können wie folgt aussehen:

  • Accord x-Engine
  • Accord x Bremse
  • Accord x Strahler
  • CR-V x-Engine
  • CR-V x Bremse
  • CR-V x Heizkörper

Die Antwort definiert ein zweidimensionales Array von Aggregationsergebnissen, die in einer Tabelle dargestellt werden können.

Beispiel für Paar-Aggregation
Diese Tabelle hat Zeilen- und Spaltenüberschriften. Die Zeilenüberschriften geben Automodelle an. Die Spaltenüberschriften geben Kfz-Komponenten an. Jede Zelle berechnet einen Relevanzwert, indem der Relevanzwert des Automodells (Zeile) mit dem Relevanzwert der Autokomponente (Kopfzeile) multipliziert wird.
Fahrzeugmodell Komponente: engine Komponente: brake Komponente: Kühler
Vereinbarung Accord x-Engine Accord x Bremse Accord x Strahler
CR-V CR-V x-Engine CR-V x Bremse CR-V x Heizkörper

Jedes Array von Spalten und Zeilen der Tabelle wird in derselben Reihenfolge wie die Ergebnisse der ersten und zweiten Aggregationen sortiert. Wenn Sie beispielsweise die Aggregation term als erstes Argument angeben, werden die resultierenden Spaltenarrays nach der Häufigkeit von Begriffen sortiert. Wenn Sie die Aggregation timeslice als zweites Argument verwenden, werden die Zeilenarrays nach Datum oder Uhrzeit sortiert.

Summe

Addiert die Werte des angegebenen Feldes über alle übereinstimmenden Dokumente.

Syntax

sum(field)

Beispiel

Preisbeispiele für Produkte
Produkt Preis
I-Serie 200
Serie J 450
X-Serie 325

Wenn der Aggregationstyp sum auf mehrere Dokumente angewendet wird, in denen das Feld price die Werte enthält, die in Tabelle 6 angezeigt werden, lautet das Ergebnis 975.

sum(price)=975

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

Bedingung

Gibt die Häufigkeit eines oder mehrerer Begriffe in einer Gruppe abgefragter Dokumente an.

Syntax

term(field:{field_name})

Optional können Sie die folgenden Parameter angeben:

  • count: Gibt die maximale Anzahl der zurückzugebenden Begriffe an.

  • name: Sie können optional einen angepassten Namen angeben. Wird nicht zurückgegeben, wenn Relevanzinformationen in der Anforderung enthalten sind.

  • relevancy: Boolescher Wert, der angibt, ob Relevanzinformationen in das Ergebnis eingeschlossen werden. Sie können die Relevanz verwenden, um eine Bewertung abzurufen, die die Relevanzstufe zwischen dem Begriff und den Schlüsselwörtern in der Abfrage angibt. Dieser Parameter ist standardmäßig false. Bei Angabe von 'true' werden auch die folgenden Felder zurückgegeben:

    • total_matching_documents: Anzahl der Dokumente in der Objektgruppe, bei denen der Begriff im angegebenen Feld erwähnt wird
    • estimated_matching_results: Anzahl der Dokumente, die schätzungsweise den Begriff im angegebenen Feld in der Gruppe von Dokumenten enthalten, die von der Abfrage zurückgegeben werden.

Beispiel

Das folgende Beispiel gibt den Text aus den erkannten Entitäten im Dokument zurück und gibt an, dass maximal 10 Begriffe zurückgegeben werden sollen.

Beispiel:

term(enriched_text.entities.text,count:10)

Wenn relevancy auf true gesetzt ist, wird in den Ergebnissen ein Relevanzwert angezeigt. Die Relevanz misst die Eindeutigkeit der Häufigkeitsanzahl im Vergleich zu anderen Dokumenten, die Ihrer Abfrage entsprechen. Wenn die Relevanz 2.0anzeigt, bedeutet dies, dass die Häufigkeit, mit der sich die beiden Datenpunkte schneiden, 2 mal größer als erwartet ist.

Weitere Beispiele finden Sie unter Dokumente gruppieren und Aggregationstypen kombinieren.

timeslice

Ein spezielles Histogramm, das Datumswerte verwendet, um Intervallsegmente zu erstellen.

Syntax

Die Syntax lautet timeslice({field},{interval},{time_zone}).

  • Das von Ihnen angegebene Feld muss den Datentyp date aufweisen. Weitere Informationen zum Datumsfeld finden Sie unter Handhabung von Datumsangaben.
  • Gültige Intervallwerte sind 1second oder {n}seconds, 1minute oder {n}minutes, 1hour oder {n}hours, 1day oder {n}days, 1week oder {n}weeks, 1month oder {n}months und 1year oder {n}years, wobei {n} eine Zahl ist.
  • Sie können optional einen angepassten Namen einschließen, indem Sie einen Parameter name einschließen.

Beispiel

Das folgende Beispiel zeigt die Anzahl der Übereinstimmungen für jeden Tageswert.

timeslice(field:DATEA,interval:1day)

Die Ergebnisse sehen wie folgt aus.

"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

Gibt die Dokumente in der Rangfolge für die Bewertung der Abfrage oder Aufbereitung zurück. Dieser Parameter kann mit jedem beliebigen Abfrageparameter und jeder beliebigen Aggregation kombiniert werden.

Syntax

{aggregation}.top_hits({n})

Beispiel

Im folgenden Beispiel wird der oberste Treffer für den Begriff halt pro Stadt zurückgegeben.

{
  "query":"halt",
  "aggregation": "term(CITY).top_hits(1)"
}

Die Antwort enthält die häufigsten Abfrageergebnisse für den Begriff halt, gruppiert nach Städten, die in Dokumenten erwähnt werden, in denen der Begriff am häufigsten erwähnt wird. Standardmäßig werden zehn Ergebnisse zurückgegeben. Für jeden der 10 Städte wird das Dokument mit der höchsten Bewertung als Objekt hit zurückgegeben. Der Inhalt für jede hit im Array hits stimmt mit dem Inhalt in jeder result im Array results überein. Nur die Reihenfolge der Ergebnisse ist unterschiedlich.

"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": []
      }
      ...

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

Trend

Erkennt scharfe und unerwartete Änderungen in der Häufigkeit eines Schlüsselwortwerts in einem angegebenen Zeitraum basierend auf den letzten Häufigkeitsänderungen des Schlüsselwortwerts.

SytnaxCity in Margam

trend(facet:{aggregation},time_segments:{aggregation})

Die erste Aggregation (facet) muss einen der folgenden Aggregationstypen aufweisen:

  • term
  • group_by

Der Parameter relevancy aus der Aggregation term oder group_by wird ignoriert.

Die zweite Aggregation (time_segments) muss eine Aggregation des Typs timeslice sein.

Alternativ können Sie die folgenden Parameter einschließen:

  • show_estimated_matching_results:true: Gibt an, ob die estimated_matching_results-Informationen in das Ergebnis eingeschlossen werden. Dieses Feld enthält die Anzahl der Dokumente, die schätzungsweise den Begriff im angegebenen Feld haben oder die Bedingungen in der angegebenen Aggregation für das angegebene Zeitintervall in der Gruppe der Dokumente erfüllen, die von der Abfrage zurückgegeben werden.
  • show_total_matching_documents:true: Gibt an, ob die total_matching_documents-Informationen in das Ergebnis eingeschlossen werden. Dieses Feld enthält die Anzahl der Dokumente in der Objektgruppe, in denen der Begriff im angegebenen Feld angegeben ist oder die Bedingung erfüllt ist.

Pro Abfrageanforderung kann nur eine Trendaggregation verwendet werden und sie kann nicht mit anderen Aggregationen kombiniert werden.

Beispiel

Im folgenden Beispiel wird der Trendindikator oder Trendindex unter Verwendung von Kombinationen von Ergebnissen aus den folgenden Aggregationen berechnet:

  • Begriff (Geschmack): Vanille, Schokolade, Minze
  • timeslice (Datum, 1month): Jan 2020, Feb 2020, Mar 2020, Apr 2020, May 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> )

Die resultierende Matrix kann in einer Tabelle dargestellt werden.

Beispiel für Trendaggregation
Diese Tabelle hat Zeilen- und Spaltenüberschriften. Die Zeilenüberschriften geben die Monate des Jahres 2020 an. Die Spaltenüberschriften geben Eiscremevarianten an. Jede Zelle berechnet eine Relevanzbewertung, indem der Relevanzwert für den Monat (Zeile) mit dem Relevanzwert für den Typ (Header) multipliziert wird.
Monat 2020 Geschmack: Vanille Geschmack: Schokolade Variante: mint
Jan Vanille x Jan Schokolade x Jan Mint x Jan
Feb Vanille x Feb Schokolade x Feb Mint x Feb
Mär Vanille x März Schokolade x Mär Mint x Mär
Apr Vanille x Apr Schokolade x Apr Mint x Apr
Mai Vanille x Mai Schokolade x Mai Mint x Mai
Jun Vanille x Jun Schokolade x Jun Mint x Jun

In der folgenden Beispielantwort sind die Schlüsseldaten der Wert trend_indicator. Der Trendindikator misst das Steigerungsverhältnis der Häufigkeit eines bestimmten Facettenwerts für ein bestimmtes Zeitintervall im Vergleich zur erwarteten durchschnittlichen Häufigkeit. Die Ausnahmedurchschnittshäufigkeit wird anhand der Änderungen in den vergangenen Zeitintervallhäufigkeiten des angegebenen Facettenwerts unter Verwendung eines gewichteten arithmetischen Mittelwerts berechnet.

Ist der standardisierte Restwert kleiner als -2, ist die beobachtete Häufigkeit kleiner als die erwartete Häufigkeit. Wenn sie größer als 2 ist, ist die beobachtete Frequenz größer als die erwartete Frequenz. Wenn das standardisierte Residuum um 3 oder mehr größer oder kleiner als die erwartete Häufigkeit ist, geschieht etwas Ungewöhnliches und deutet darauf hin, dass es eine Anomalie gibt, die untersucht werden sollte.

Die erwartete Anzahl der Feedbackübergaben für die vanilla-Version im Mai wird beispielsweise aus der Anzahl der Feedbackübergaben berechnet, die zuvor empfangen wurden (von Januar bis April). Das Ergebnis ist 5.341. Die tatsächliche Anzahl der Feedbackübergaben im Mai ist 10. Die Ergebnisse zeigen, dass der Vanillegeschmack ungefähr doppelt so viele Feedback-Einreichungen wie erwartet erhalten hat. Der standardisierte Restwert ist 2.016, der größer als erwartet, aber nicht ungewöhnlich ist.

{
"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": [...]
...
}  

Thema

Erkennt, wie stark die Häufigkeit eines Schlüsselwortwerts vom erwarteten Durchschnitt für den angegebenen Zeitraum abweicht. Dieser Aggregationstyp verwendet keine Daten aus vorherigen Zeiträumen. Sie berechnet einen Index unter Verwendung der Durchschnittswerte der Häufigkeitszähler anderer Schlüsselwortwerte für den angegebenen Zeitraum.

Syntax

topic(facet:{aggregation},time_segments:{aggregation})

Die erste Aggregation (facet) muss einen der folgenden Aggregationstypen aufweisen:

  • term
  • group_by

Der Parameter relevancy aus der Aggregation term oder group_by wird ignoriert.

Die zweite Aggregation (time_segments) muss eine Aggregation des Typs timeslice sein.

Alternativ können Sie die folgenden Parameter einschließen:

  • show_estimated_matching_results:true: Gibt an, ob die estimated_matching_results-Informationen in das Ergebnis eingeschlossen werden. Dieses Feld enthält die Anzahl der Dokumente, die schätzungsweise den Begriff im angegebenen Feld haben oder die Bedingungen in der angegebenen Aggregation für das angegebene Zeitintervall in der Gruppe der Dokumente erfüllen, die von der Abfrage zurückgegeben werden.
  • show_total_matching_documents:true: Gibt an, ob die total_matching_documents-Informationen in das Ergebnis eingeschlossen werden. Dieses Feld enthält die Anzahl der Dokumente in der Objektgruppe, in denen der Begriff im angegebenen Feld angegeben ist oder die Bedingung erfüllt ist.

Pro Abfrageanforderung kann nur eine Topicaggregation verwendet werden, die nicht mit anderen Aggregationen kombiniert werden kann.

Beispiel

{
    "query: like",
    "aggregation": "topic( facet: term(flavor), time_segments: timeslice(date, 1month), show_estimated_matching_results: true, show_total_matching_documents: true )"
}

Mit demselben Dataset und derselben Aggregation wie im Beispiel für die Begriffsaggregation können die Ergebnisse wie folgt aussehen.

Beachten Sie, dass sich die topic_indicator-Werte von den trend_indicator-Werten unterscheiden, die von der Aggregation trend zurückgegeben werden. Während beide aus den tatsächlichen und erwarteten Häufigkeiten berechnet werden, unterscheiden sie sich, weil ihre erwarteten Häufigkeiten unterschiedlich berechnet werden. In der Aggregation trend wird die erwartete Häufigkeit der Feedbackübergaben für Eis mit Vanillageschmack im Mai aus der Anzahl der Feedbackübergaben, die zuvor für Vanille (von Jan bis Apr) empfangen wurden, und der Gesamtzahl der Feedbackübergaben, die für alle Aromen im Mai empfangen wurden, berechnet. In der topic-Aggregation wird die erwartete Häufigkeit von Feedbackeinreichungen für Eis mit Vanillageschmack im Mai aus der Anzahl der Feedbackeinreichungen, die für Vanille empfangen wurden, und der Gesamtzahl der Feedbackeinreichungen, die für alle Aromen im Mai empfangen wurden, berechnet. In diesem Beispiel ist das erwartete Häufigkeitsergebnis 12.169, die tatsächliche Häufigkeit ist 10 und die topic_indicator ist -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

Gibt die Anzahl der eindeutigen Instanzen für das angegebene Feld in der Sammlung zurück.

Syntax

unique_count(field)

Beispiel

Die folgende Aggregation fordert die Anzahl der eindeutigen Aufbereitungstypen an, die in der Abfrage erkannt werden.

unique_count(enriched_text.keyword.type)

Das Ergebnis gibt an, dass es 17 übereinstimmende Ergebnisse gibt. In diesen 17 Dokumenten werden 14 Entitätstypen erwähnt.

{
  "matching_results": 17,
  "retrieval_details": {
    "document_retrieval_strategy": "untrained"
  },
  "aggregations": [
    {
      "type": "unique_count",
      "field": "enriched_text.entities.type",
      "value": 14.0
    }
  ],
  "results": []
}

Dieser Aggregationstyp führt eine Terminaloperation durch. In Kombination mit anderen Aggregationen wird die Ausgabe nicht als Eingabe für die nächste Aggregation verwendet. Die Ausgabe wird in einer diskreten Gruppe zurückgegeben.

Im folgenden Beispiel fordert der Aggregationsparameter die Ergebnisse an, um die ersten 45 am häufigsten genannten Entitäten anzuzeigen. Gibt pro Entität an, wie viele Dokumente den Begriff erwähnen und wie oft der Begriff insgesamt vorkommt.

term(enriched_text.entities.text,count:45).unique_count(enriched_text.entities.type)

Die Ergebnisse enthalten mehrere Aggregationen wie die folgende Gruppe für den Begriff PostgreSQL. Die Aggregation gibt an, dass der Begriff in 4 Dokumenten vorkommt und 12 Mal erwähnt wird.

{
  "key": "PostgreSQL",
  "matching_results": 4,
  "aggregations": [
    {
      "type": "unique_count",
      "field": "enriched_text.entities.type",
      "value": 12.0
    }
  ]
}