Beispiele für facettierte Navigation

Hinweis

Azure KI-Suche ist über das Azure Portal, REST-APIs und Azure SDKs verfügbar. Es unterstützt auch Foundry IQ, die verwaltete Wissensschicht, die Unternehmensinhalte in wiederverwendbare, berechtigungsfähige Wissensbasen für Agenten im Microsoft Foundry-Portal transformiert.

Important

Features, Funktionen oder Eigenschaften, die als (Vorschau) gekennzeichnet sind, werden von keiner Dienstebenenvereinbarung (SLA) abgedeckt, werden für Produktionsworkloads nicht empfohlen und können geändert oder eingeschränkt werden, bevor sie allgemein verfügbar sind. Die Azure KI-Suche Vorschaubedingungen gelten für alle Vorschaufunktionen, unabhängig davon, ob sie eigenständig oder Teil eines allgemein verfügbaren Features ist.

Dieser Abschnitt erweitert die Konfiguration der Facettennavigation mit Beispielen, die grundlegende Verwendung und andere Szenarien veranschaulichen.

Facetable-Felder werden in einem Index definiert, aber Facettenparameter und Ausdrücke werden in Abfrageanforderungen definiert. Wenn Sie über einen Index mit facetable-Feldern verfügen, können Sie Facethierarchien (Vorschau), Facetaggregationen (Vorschau) und Facetfilter (Vorschau) für vorhandene Indizes ausprobieren.

Facetparameter und -syntax

Abhängig von der API ist eine Facetabfrage in der Regel ein Array von Facetausdrücken, die auf Suchergebnisse angewendet werden. Jeder Facettenausdruck enthält einen facettierbaren Feldnamen, optional gefolgt von einer durch Komma getrennten Liste von Name-Wert-Paaren.

  • facet query ist eine Abfrageanforderung, die ein Facettenmerkmal enthält.
  • Facetable-Feld ist eine Felddefinition im Suchindex, der der facetable Eigenschaft zugeordnet ist.
  • count ist die Anzahl der Übereinstimmungen für jede Facette in den Suchergebnissen.

In der folgenden Tabelle werden die in den Beispielen verwendeten Facetparameter beschrieben.

Facet-Parameter Beschreibung Verwendung Beispiel
count Maximale Anzahl von Facetbegriffen pro Struktur. Ganzzahl. Der Standardwert ist 10. Es gibt keine Obergrenze, aber höhere Werte beeinträchtigen die Leistung, insbesondere wenn das facettierte Feld eine große Anzahl eindeutiger Begriffe enthält. Dies liegt daran, wie Facettenabfragen auf Shards verteilt werden. Sie können count auf null oder auf einen Wert setzen, der größer oder gleich der Anzahl der eindeutigen Werte im facetable-Feld ist, um eine genaue Zählung über alle Shards hinweg zu erhalten. Der Kompromiss ist eine höhere Latenz. Tags,count:5 begrenzt die Ergebnisse der Facettennavigation auf die 5 Facettengruppen mit den meisten Facetten, wobei diese in beliebiger Reihenfolge angeordnet sein können.
sort Bestimmt die Reihenfolge der Facet-Buckets. Gültige Werte sind count, -count, value, -value. Verwenden Sie count, um Facetten von der größten zur kleinsten aufzulisten. Wird -count verwendet, um in aufsteigender Reihenfolge (am kleinsten zum größten) zu sortieren. Verwenden Sie value, um alphanumerisch nach Facet-Wert in aufsteigender Reihenfolge zu sortieren. Wird -value verwendet, um absteigend nach Wert zu sortieren. "facet=Category,count:3,sort:count" ruft die obersten drei Facetten-Buckets in den Suchergebnissen ab, die in absteigender Reihenfolge nach der Anzahl der Übereinstimmungen in jeder Kategorie aufgelistet sind. Wenn die drei wichtigsten Kategorien Budget, Extended-Stay und Luxury sind und Budget 5 Treffer hat, Extended-Stay hat 6, und Luxury hat 4, dann werden die Facet buckets als Extended-Stay, Budget, Luxury bestellt. Ein weiteres Beispiel ist"facet=Rating,sort:-value". Es erzeugt Facets für alle möglichen Bewertungen in absteigender Reihenfolge nach Wert. Wenn Bewertungen zwischen 1 und 5 liegen, werden die Facets 5, 4, 3, 2, 1 sortiert, unabhängig davon, wie viele Dokumente mit den einzelnen Bewertungen übereinstimmen.
values Stellt Werte für Facetbeschriftungen bereit. Legen Sie auf durch einen senkrechten Strich (Pipe) getrennte numerische oder Edm.DateTimeOffset-Werte fest, die einen dynamischen Satz von Facettenwerten angeben. Die Werte müssen in sequenzieller aufsteigender Reihenfolge aufgelistet werden, um die erwarteten Ergebnisse zu erhalten. "facet=baseRate,values:10 | 20" erstellt drei Facetten-Buckets: einen für den Basistarif 0 bis unter 10, einen für 10 bis unter 20 und einen für 20 und höher. Eine Zeichenfolge "facet=lastRenovationDate,values:2024-02-01T00:00:00Z" erstellt zwei Facetten-Buckets: einen für Hotels, die vor Februar 2024 renoviert wurden, und einen für Hotels die ab dem 1. Februar 1, 2024 renoviert wurden.
interval Stellt eine Intervallsequenz für Facets bereit, die in Intervalle gruppiert werden können. Ein ganzzahliges Intervall größer als Null für Zahlen oder Minute, Stunde, Tag, Woche, Monat, Quartal, Jahr für Datumszeitwerte. "facet=baseRate,interval:100" erstellt Facetten-Buckets basierend auf Basistarifbereichen von 100. Wenn die Basissätze alle zwischen 60 $ und 600 $ liegen, gibt es Facetten-Buckets für 0-100, 100-200, 200-300, 300-400, 400-500 und 500-600. Die Zeichenfolge "facet=lastRenovationDate,interval:year" produziert für jedes Jahr einen Facetten-Bucket, in dem ein Hotel renoviert wurde.
timeoffset Gibt den UTC-Zeitversatz an, der bei der Festlegung von Zeitgrenzen berücksichtigt werden soll. Auf ([+-]hh:mm, [+-]hhmm, or [+-]hh) festlegen. Bei Verwendung muss der timeoffset Parameter mit der Intervalloption kombiniert werden, und nur, wenn er auf ein Feld vom Typ Edm.DateTimeOffsetangewendet wird. "facet=lastRenovationDate,interval:day,timeoffset:-01:00" verwendet die Tagesgrenze, die um 01:00:00 UTC beginnt (Mitternacht in der Zielzeitzone).

count und sort kann in derselben Facetspezifikation kombiniert werden, aber sie können nicht mit interval oder valueskombiniert werden.

interval und values kann nicht miteinander kombiniert werden.

Intervall-Facetten für Datum und Uhrzeit werden basierend auf der UTC-Zeit berechnet, wenn timeoffset nicht angegeben ist. Zum Beispiel, für "facet=lastRenovationDate,interval:day" beginnt die Tagesgrenze um 00:00:00 UTC.

Einfaches Facetbeispiel

Die folgenden Facettenabfragen arbeiten mit dem Hotels-Beispielindex. Sie können die JSON-Ansicht im Such-Explorer verwenden, um sie in die JSON-Abfrage einzufügen. Sie finden Hilfe zu den ersten Schritten unter Facettierte Navigation zu Suchergebnissen hinzufügen.

Diese erste Abfrage ruft Facetten für Kategorien, Bewertungen, Tags und Räume mit BaseRate-Werten in bestimmten Bereichen ab. Beachten Sie, dass sich die letzte Facette in einem Unterfeld der Räumesammlung befindet. Facetten zählen das übergeordnete Dokument (Hotels) und nicht die Zwischendokumente (Zimmer), sodass die Antwort bestimmt, wie viele Hotels in jeder Preiskategorie Zimmer haben.

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "ocean view",  
  "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ],
  "count": true 
}  

In diesem zweiten Beispiel wird ein Filter verwendet, um das vorherige Faceted-Abfrageergebnis einzugrenzen, nachdem der Benutzer "Bewertung 3" und die Kategorie "Motel" ausgewählt hat.

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "water view",  
  "facets": [ "Tags", "Rooms/BaseRate,values:80|150|220" ],
  "filter": "Rating eq 3 and Category eq 'Motel'",
  "count": true  
} 

Im dritten Beispiel wird eine Obergrenze für eindeutige Ausdrücke festgelegt, die in einer Abfrage zurückgegeben werden. Der Standardwert ist 10, Sie können diesen Wert jedoch mithilfe des Count-Parameters für das Facet-Attribut erhöhen oder verkleinern. In diesem Beispiel werden Facets für die Stadt zurückgegeben, die auf 5 beschränkt sind.

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "view",  
  "facets": [ "Address/City,count:5" ],
  "count": true
} 

Dieses Beispiel zeigt drei Facetten für „Kategorie“, „Tags“ und „Bewertung“, mit einer Anzahlüberschreibung für „Tags“ und einer Bereichsüberschreibung für „Bewertung“, die andernfalls doppelt im Index gespeichert werden.

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "facets": [ 
        "Category", 
        "Tags,count:5", 
        "Rating,values:1|2|3|4|5"
    ],
    "count": true
}

Für jeden facettierten Navigationsbaum gibt es ein Standardlimit der führenden 10 Facetteninstanzen, die von der Abfrage gefunden wurden. Diese Standardeinstellung ist für Navigationsstrukturen sinnvoll, da sie die Werteliste auf eine verwaltbare Größe behält. Sie können die Standardeinstellung überschreiben, indem Sie "count" einen Wert zuweisen. Reduziert beispielsweise "Tags,count:5" die Anzahl der Tags unter dem Abschnitt "Tags" auf die obersten fünf Tags.

Nur für numerische und Datums-/Zeit-Werte können Sie die Werte im Facetfeld (z. B. facet=Rating,values:1|2|3|4|5) explizit festlegen, um die Ergebnisse in kontinuierliche Bereiche zu trennen (entweder basierend auf numerischen Werten oder Zeiträumen). Alternativ können Sie „Intervall“, wie in facet=Rating,interval:1 hinzufügen.

Jeder Bereich wird mit 0 als Ausgangspunkt, einem Wert aus der Liste als Endpunkt erstellt und dann aus dem vorherigen Bereich gekürzt, um diskrete Intervalle zu erstellen.

Beispiel für unterschiedliche Werte

Sie können eine Abfrage formulieren, die für jedes Facetable-Feld eine unterschiedliche Wertanzahl zurückgibt. In diesem Beispiel wird eine leere oder nicht qualifizierte Abfrage ("search": "*") formuliert, die für alle Dokumente übereinstimmt, aber durch Festlegen top auf Null erhalten Sie nur die Anzahl, ohne Ergebnisse.

Aus Platzgründen enthält diese Abfrage nur zwei Felder, die als facetable "Hotels-Beispielindex" gekennzeichnet sind.

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "count": true,
    "top": 0,
    "facets": [ 
        "Category", "Address/StateProvince""
    ]
}

Ergebnisse dieser Abfrage sind wie folgt:

{
  "@odata.count": 50,
  "@search.facets": {
    "Address/StateProvince": [
      {
        "count": 9,
        "value": "WA"
      },
      {
        "count": 6,
        "value": "CA "
      },
      {
        "count": 4,
        "value": "FL"
      },
      {
        "count": 3,
        "value": "NY"
      },
      {
        "count": 3,
        "value": "OR"
      },
      {
        "count": 3,
        "value": "TX"
      },
      {
        "count": 2,
        "value": "GA"
      },
      {
        "count": 2,
        "value": "MA"
      },
      {
        "count": 2,
        "value": "TN"
      },
      {
        "count": 1,
        "value": "AZ"
      }
    ],
    "Category": [
      {
        "count": 13,
        "value": "Budget"
      },
      {
        "count": 12,
        "value": "Suite"
      },
      {
        "count": 7,
        "value": "Boutique"
      },
      {
        "count": 7,
        "value": "Resort and Spa"
      },
      {
        "count": 6,
        "value": "Extended-Stay"
      },
      {
        "count": 5,
        "value": "Luxury"
      }
    ]
  },
  "value": []
}

Beispiel für eine Facettenhierarchie (Vorschau)

Mithilfe der latest Preview-REST-API oder des Azure Portals können Sie eine Facethierarchie mithilfe der Operatoren > und ; konfigurieren.

Operator Beschreibung
> Der Schachtelungsoperator (hierarchisch) kennzeichnet eine Beziehung zwischen übergeordneten und untergeordneten Elementen.
; Der Semikolonoperator kennzeichnet mehrere Felder auf derselben Schachtelungsebene, die alle untergeordneten Elemente desselben übergeordneten Elements sind. Das übergeordnete Element darf nur ein Feld enthalten. Die Felder der übergeordneten und untergeordneten Elemente müssen facetable sein.

Die Reihenfolge der Vorgänge in einem Facetausdruck, der Facethierarchien enthält, sind:

  • Der Optionsoperator (Komma ,), der Facetparameter für das Facetfeld trennt, z. B. das Komma in Rooms/BaseRate,values
  • Die Klammern, wie die, die (Rooms/BaseRate,values:50 ; Rooms/Type) einschließen.
  • Der Schachtelungsoperator (Winkelklammer >)
  • Der Anfügeoperator (Semikolon ;), veranschaulicht in einem zweiten Beispiel "Tags>(Rooms/BaseRate,values:50 ; Rooms/Type)" in diesem Abschnitt, in dem zwei untergeordnete Facetten Peers unter dem übergeordneten Element „Tags“ sind.

Beachten Sie, dass Klammern vor Schachtelungs- und Anfügevorgängen verarbeitet werden: A > B ; C wäre anders als A > (B ; C).

Es gibt mehrere Beispiele für Facethierarchien. Das erste Beispiel ist eine Abfrage, die nur wenige Dokumente zurückgibt, die für die Anzeige einer vollständigen Antwort hilfreich sind. Facetten zählen das übergeordnete Dokument (Hotels) und nicht die zwischengeschalteten Unterdokumente (Räume), sodass die Antwort bestimmt, wie viele Hotels in jedem Facet-Bucket über mindestens ein Zimmer verfügen.

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{
  "search": "ocean",  
  "facets": ["Address/StateProvince>Address/City", "Tags>Rooms/BaseRate,values:50"],
  "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
  "count": true 
}

Ergebnisse aus dieser Abfrage sind wie folgt. Beide Hotels verfügen über Pools. Für andere Tags bietet nur ein Hotel die Amenität.

{
  "@odata.count": 2,
  "@search.facets": {
    "Tags": [
      {
        "value": "pool",
        "count": 2,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 2
            }
          ]
        }
      },
      {
        "value": "air conditioning",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "bar",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "restaurant",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "view",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      }
    ],
    "Address/StateProvince": [
      {
        "value": "FL",
        "count": 1,
        "@search.facets": {
          "Address/City": [
            {
              "value": "Tampa",
              "count": 1
            }
          ]
        }
      },
      {
        "value": "HI",
        "count": 1,
        "@search.facets": {
          "Address/City": [
            {
              "value": "Honolulu",
              "count": 1
            }
          ]
        }
      }
    ]
  },
  "value": [
    {
      "@search.score": 1.6076145,
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Tags": [
        "view",
        "pool",
        "restaurant"
      ],
      "Address": {
        "City": "Tampa",
        "StateProvince": "FL"
      }
    },
    {
      "@search.score": 1.0594962,
      "HotelName": "Windy Ocean Motel",
      "Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
      "Tags": [
        "pool",
        "air conditioning",
        "bar"
      ],
      "Address": {
        "City": "Honolulu",
        "StateProvince": "HI"
      }
    }
  ]
}

In diesem zweiten Beispiel wird das vorherige erweitert, wobei mehrere Facetten auf oberster Ebene mit mehreren untergeordneten Elementen veranschaulicht werden. Beachten Sie, dass der Semikolonoperator (;) jedes untergeordnete Element trennt.

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{  
  "search": "+ocean",  
  "facets": ["Address/StateProvince > Address/City", "Tags > (Rooms/BaseRate,values:50 ; Rooms/Type)"],
  "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
  "count": true 
}  

Eine Teilantwort, die aus Platzgründen gekürzt wird, zeigt Tags mit untergeordneten Facetten für Basistarif und Typ der Zimmer an. Im hotels-Beispielindex haben beide Hotels, die mit +ocean übereinstimmen, Zimmer in jedem Typ und einen Pool.

{
  "@odata.count": 2,
  "@search.facets": {
    "Tags": [
      {
        "value": "pool",
        "count": 2,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 2
            }
          ],
          "Rooms/Type": [
            {
              "value": "Budget Room",
              "count": 2
            },
            {
              "value": "Deluxe Room",
              "count": 2
            },
            {
              "value": "Standard Room",
              "count": 2
            },
            {
              "value": "Suite",
              "count": 2
            }
          ]
        }}]},
  ...
}

Dieses letzte Beispiel zeigt Rangfolgeregeln für Klammern, die sich auf Schachtelungsebenen auswirken. Angenommen, Sie möchten eine Facettenhierarchie in dieser Reihenfolge zurückgeben.

Address/StateProvince
  Address/City
    Category
    Rating

Um diese Hierarchie zurückzugeben, erstellen Sie eine Abfrage, bei der Kategorie und Bewertung gleichgeordnete Elemente unter Adresse/Stadt sind.

  { 
    "search": "beach",  
    "facets": [
        "Address/StateProvince > (Address/City > (Category ; Rating))"
        ],
    "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
    "count": true 
  }

Wenn Sie die innersten Klammern entfernen, sind Kategorie und Bewertung nicht mehr gleichgeordnet, da die Rangfolgeregeln bedeuten, dass der > Operator vor ;ausgewertet wird.

  { 
    "search": "beach",  
    "facets": [
        "Address/StateProvince > (Address/City > Category ; Rating)"
        ],
    "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
    "count": true 
  }

Das übergeordnete Element der obersten Ebene ist weiterhin „Adresse/StateProvince“, aber jetzt sind „Adresse/Stadt“ und „Bewertung“ auf derselben Ebene.

Address/StateProvince
  Rating
  Address/City
    Category

Facetfilterbeispiel (Vorschau)

Mithilfe der latest preview-REST-API oder des Azure Portals können Sie Facetfilter konfigurieren.

Mithilfe der Facettenfilterung können Sie die Facettenwerte auf diejenigen beschränken, die mit einem angegebenen regulären Ausdruck übereinstimmen. Zwei neue Parameter akzeptieren einen regulären Ausdruck, der auf das Facetfeld angewendet wird:

  • includeTermFilter Filtert die Facetwerte auf diejenigen, die dem regulären Ausdruck entsprechen
  • excludeTermFilter filtert die Facetwerte auf diejenigen, die nicht mit dem regulären Ausdruck übereinstimmen

Wenn eine Facetzeichenfolge beide Bedingungen erfüllt, hat die excludeTermFilter Vorrang, weil der Satz von Bucketzeichenfolgen zuerst mit includeTermFilter ausgewertet und dann mit excludeTermFilter ausgeschlossen wird.

Es werden nur die Facetwerte zurückgegeben, die dem regulären Ausdruck entsprechen. Sie können diese Parameter mit anderen Facettenoptionen (z.B. count, sort und hierarchisches Facetten) für Zeichenfolgenfelder kombinieren.

Da der reguläre Ausdruck in einem JSON-Zeichenfolgenwert geschachtelt ist, müssen Sie sowohl das doppelte Anführungszeichen (") als auch die umgekehrten Schrägstriche (\) auslassen. Der reguläre Ausdruck selbst wird durch den Schrägstrich (/) begrenzt. Weitere Informationen zu Escapemustern finden Sie in der Suche nach regulären Ausdrücken.

Das folgende Beispiel zeigt, wie Sie Sonderzeichen in regulären Ausdrücken entfernen, wie zum Beispiel den umgekehrten Schrägstrich, doppelte Anführungszeichen oder andere Syntaxzeichen.

{
    "search": "*", 
    "facets": ["name,includeTermFilter:/EscapeBackslash\\\OrDoubleQuote\\"OrRegexCharacter\\(/"] 
}

Hier sehen Sie ein Beispiel für einen Facettenfilter, der für Budgethotels und Hotels für überlange Aufenthalte mit der Bewertung als untergeordnetes Element jeder Hotelkategorie übereinstimmt.

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{ 
    "search": "*", 
    "facets": ["(Category,includeTermFilter:/(Budget|Extended-Stay)/)>Rating,values:1|2|3|4|5"],
    "select": "HotelName, Category, Rating",
    "count": true 
} 

Das folgende Beispiel ist eine gekürzte Antwort (Hoteldokumente werden aus Platzgründen weggelassen).

{
  "@odata.count": 50,
  "@search.facets": {
    "Category": [
      {
        "value": "Budget",
        "count": 13,
        "@search.facets": {
          "Rating": [
            {
              "to": 1,
              "count": 0
            },
            {
              "from": 1,
              "to": 2,
              "count": 0
            },
            {
              "from": 2,
              "to": 3,
              "count": 4
            },
            {
              "from": 3,
              "to": 4,
              "count": 5
            },
            {
              "from": 4,
              "to": 5,
              "count": 4
            },
            {
              "from": 5,
              "count": 0
            }
          ]
        }
      },
      {
        "value": "Extended-Stay",
        "count": 6,
        "@search.facets": {
          "Rating": [
            {
              "to": 1,
              "count": 0
            },
            {
              "from": 1,
              "to": 2,
              "count": 0
            },
            {
              "from": 2,
              "to": 3,
              "count": 4
            },
            {
              "from": 3,
              "to": 4,
              "count": 1
            },
            {
              "from": 4,
              "to": 5,
              "count": 1
            },
            {
              "from": 5,
              "count": 0
            }
          ]
        }
      }
    ]
  }, 
  "value": [  ALL 50 HOTELS APPEAR HERE ]
}

Beispiel für Facetaggregation (Vorschau)

Mithilfe der latest preview-REST-API oder des Azure Portals können Sie Facets aggregieren.

Mithilfe von Facetaggregationen können Sie Metriken aus Facetwerten berechnen. Die Aggregationsfähigkeit funktioniert zusammen mit den vorhandenen Facettenoptionen.

Aggregator Beschreibung
Summe Gibt den gesamtkumulierten Wert aus dem Feld in allen Dokumenten zurück. Gilt nur für numerische Typen. In früheren Vorschauversionen unterstützt.
Minuten Gibt den Minimalwert aus dem Feld für alle Dokumente zurück. Gilt nur für numerische Typen.
Max Gibt den Maximalwert aus dem Feld für alle Dokumente zurück. Gilt nur für numerische Typen.
Avg Gibt den Mittelwert aus dem Feld in allen Dokumenten zurück. Gilt nur für numerische Typen.
Kardinalität Gibt die ungefähre Anzahl unterschiedlicher Werte aus dem Feld über alle Dokumente mithilfe des HyperLogLog-Algorithmus zurück. Sie können cardinality in facetable-Feldern anfordern, einschließlich Zeichenfolgen- und Datetime-Felder (zusammen mit den entsprechenden Sammlungsformularen).

Festlegen von Genauigkeitsschwellenwerten für die Kardinalitätsaggregation

Bei einer Kardinalitätsaggregation können Sie eine precisionThreshold Option als Abgrenzung zwischen Zählungen festlegen, die genau sein sollen, und Zählungen, die weniger genau sein können. Der Maximalwert beträgt 40.000. Der Standardwert ist 3.000.

Faceting wird im Arbeitsspeicher ausgeführt. Durch Erhöhen von precisionThreshold wird die Speichernutzung erhöht, indem der Wert von precisionThreshold mit 8 Byte multipliziert wird.

Beispiel: Summen-Facet-Aggregation

Sie können ein beliebiges facetable-Feld eines numerischen Datentyps addieren (mit Ausnahme von Vektoren und geografischen Koordinaten).

Hier ist ein Beispiel für die Verwendung des Hotels-Beispielindexes. Das Feld „Räume/SleepsCount“ ist facettierbar und numerisch, daher wird dieses Feld ausgewählt, um die Summe zu veranschaulichen. Wenn wir dieses Feld addieren, erhalten wir die Schlafanzahl für das gesamte Hotel. Erinnern Sie sich daran, dass Facetten das übergeordnete Dokument (Hotels) und nicht Unterdokumente dazwischen (Räume) zählen, sodass die Antwort die Werte für „SleepsCount“ aller Zimmer für das gesamte Hotel summiert. In dieser Abfrage fügen wir einen Filter hinzu, um den SleepsCount für nur ein Hotel zu addieren.

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview

{ 
      "search": "*",
      "filter": "HotelId eq '41'",
      "facets": [ "Rooms/SleepsCount, metric: sum"],
      "select": "HotelId, HotelName, Rooms/Type, Rooms/SleepsCount",
      "count": true
}

Eine Antwort für die Abfrage könnte wie im folgenden Beispiel aussehen. Windy Ocean Model bietet platz für insgesamt 40 Gäste.

{
  "@odata.count": 1,
  "@search.facets": {
    "Rooms/SleepsCount": [
      {
        "sum": 40.0
      }
    ]
  },
  "value": [
    {
      "@search.score": 1.0,
      "HotelId": "41",
      "HotelName": "Windy Ocean Motel",
      "Rooms": [
        {
          "Type": "Suite",
          "SleepsCount": 4
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Budget Room",
          "SleepsCount": 2
        },
        {
          "Type": "Budget Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 4
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 4
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        }
      ]
    }
  ]
}

Beispiel: Eine Kombination aller Aggregationen

Hier ist ein Beispiel mit einem hypothetischen "Facets"-Index, der die Syntax für jede Aggregation anzeigt. Beachten Sie, dass die Kardinalität in diesem Beispiel eine zusätzliche precisionThreshold Option aufweist (Standard ist 3.000), die auf 40.000 festgelegt ist.

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}}
Content-Type: application/json

{
    "search": "*",
    "facets": [// field names are named <something>Value in this example 
        "cardinalityValue, metric: cardinality,precisionThreshold: 40000", 
        "sumValue,metric: sum", 
        "avgValue,metric: avg", 
        "minValue,metric: min", 
        "maxValue,metric: max" 
    ] 
}

Eine Antwort für die Abfrage könnte wie im folgenden Beispiel aussehen.

{ 
    "@search.facets": { 
        "cardinalityValue": [ 
            { 
                "cardinality": 24000 // Number of distinct values in "cardinalityValue" field 
            } 
        ], 
        "sumValue": [ 
            { 
                "sum": 1200000 // Sum of all values in "sumValue" field 
            } 
        ], 
        "avgValue": [ 
            { 
                "avg": 50 // Average of all values in "avgValue" field 
            } 
        ], 
        "minValue": [ 
            { 
                "min": 1 // Minimum value in "minValue" field 
            } 
        ], 
        "maxValue": [ 
            { 
                "max": 100 // Maximum value in "maxValue" field 
            } 
        ] 
    } 
}

Beispiel: Festlegen eines Standardwerts zum Ersetzen fehlender Werte

Alle Metriken unterstützen die Angabe eines Standardwerts, wenn ein Dokument keinen Wert enthält.

  • Legen Sie für Nichtzeichenfolgentypen (numerisch, datetime, boolean) den default Parameter auf einen bestimmten Wert fest: "default: 42" .

  • Legen Sie für Zeichenfolgentypen den default Parameter auf eine Zeichenfolge fest, die mit dem einzelnen Apostrophtrennzeichen getrennt wird: "default: 'mystringhere'".

Sie können einen Standardwert hinzufügen, der verwendet werden soll, wenn ein Dokument einen Nullwert für dieses Feld enthält: "facets": [ "Rooms/SleepsCount, metric: sum, default:2"]. Wenn ein Raum einen Nullwert für das Feld "Räume/SleepsCount" aufweist, ersetzt der Standardwert den fehlenden Wert.

Hier ist eine Anforderung, die die Standardspezifikation für jeden Feldtyp veranschaulicht.

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}} 
Content-Type: application/json 

{ 
    "search": "*", 
    "facets": [// field names are named <datatype>Value in this example 
        "stringfield, metric: cardinality, default: 'my string goes here'", 
        "doubleField,metric: sum, default: 5.0", 
        "intField,metric: sum, default: 5", 
        "longField,metric: sum, default: 5" 
    ] 
} 

Bei Zeichenfolgenfeldern wird ein Standardwert durch das einzelne Anführungszeichen begrenzt. Um das Zeichen zu escapen, präfixen Sie es mit dem umgekehrten Schrägstrich "'". Alle Zeichen sind innerhalb der String-Trennzeichen gültig. Das endende Zeichen kann kein Backslash sein.

Beispiel: Mehrere Metriken für dasselbe Feld

Wenn die zugrunde liegenden Daten den Anwendungsfall unterstützen, können Sie mehrere Metriken für dasselbe Feld angeben.

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}} 
Content-Type: application/json 

{ 
    "search": "*", 
    "facets": [ 
        "fieldA, metric: cardinality, precisionThreshold: 40000", 
        "fieldA, metric: sum", 
        "fieldA, metric: avg", 
        "fieldA, metric: min", 
        "fieldA, metric: max" 
    ] 
}

Eine Antwort für die Abfrage könnte wie im folgenden Beispiel aussehen.

{ 
    "@search.facets": { 
        "fieldA": [ 
            { 
                "cardinality": 24000 // Number of distinct values in "fieldA" field 
            }, 
            { 
                "sum": 1200000 // Sum of all values in " fieldA " field 
            }, 
            { 
                "avg": 5 // Avg of all values in " fieldA " field
            }, 
            { 
                "min": 0 // Min of all values in " fieldA " field 
            }, 
            { 
                "max": 1200 // Max of all values in " fieldA " field 
            } 
        ] 
    } 
}

Nächste Schritte

Überprüfen Sie die Facetnavigationskonfiguration für Tools und APIs, und überprüfen Sie bewährte Methoden für die Arbeit mit Facets im Code.

Wir empfehlen C#: Suche zu Web-Apps hinzufügen als Beispiel für eine Facettennavigation, das Code für die Präsentationsschicht enthält. Das Beispiel enthält auch Filter, Vorschläge und AutoVervollständigen. Es verwendet JavaScript und React für die Präsentationsebene.