Příklady fasetové navigace

Poznámka

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Important

Na funkce, možnosti nebo vlastnosti označené jako (Preview) se nevztahuje smlouva o úrovni služeb, nejsou doporučené pro produkční úlohy a mohou se změnit nebo být omezeny dříve, než budou obecně k dispozici. Podmínky Azure AI Vyhledávač Preview platí pro všechny funkce ve verzi Preview, ať už jsou samostatné nebo součástí obecně dostupné funkce.

Tato část rozšiřuje konfiguraci fasetové navigace pomocí příkladů, které ukazují základní použití a další scénáře.

Facetovatelné pole jsou definována v indexu, ale parametrické vlastnosti a výrazy jsou definovány v dotazech. Pokud máte index s tabulkovými poli, můžete vyzkoušet fasetové hierarchie (Preview),agregace omezujících vlastností (Preview) a filtry omezujících vlastností (Preview) u existujících indexů.

Parametry omezující vlastnosti a syntaxe

V závislosti na rozhraní API je dotaz omezující vlastnosti obvykle pole výrazů omezujících vlastností, které se použijí pro výsledky hledání. Každý výraz omezující vlastnosti obsahuje název fasetového pole, volitelně následovaný seznamem párů typu název-hodnota oddělených čárkami.

  • Fázový dotaz je požadavek na dotaz, který zahrnuje aspekt vlastnosti.
  • Facetable pole je definice pole v indexu vyhledávání přičtená k vlastnosti facetable.
  • count je počet shod pro každý parametr nalezený ve výsledcích hledání.

Následující tabulka popisuje parametry facet použité v příkladech.

Parametr fasetu Popis Použití Příklad
count Maximální počet facetových termínů pro strukturu Celé číslo. Výchozí hodnota je 10. Horní hranice neexistuje, ale vyšší hodnoty snižují výkon, zejména v případě, že faktorizované pole obsahuje velký počet jedinečných termínů. Důvodem je způsob, jakým jsou fasetové dotazy distribuovány napříč shardy. Pokud chcete získat přesný počet napříč všemi shardami, můžete nastavit count na nulu nebo na hodnotu, která je větší nebo rovna počtu unikátních hodnot v hledatelném poli. Kompromis je zvýšená latence. Tags,count:5 omezuje odezvu fasetové navigace na 5 skupin faset s nejvyšším počtem faset, ale mohou být v libovolném pořadí.
sort Určuje pořadí facetových skupin. Platné hodnoty jsou count, -count, value, -value. Použijte count k seřazení aspektů od největších po nejmenší. Slouží -count k řazení ve vzestupném pořadí (nejmenší až největší). Použijte value k seřazení alfanumericky podle hodnoty facety ve vzestupném pořadí. Slouží -value k řazení sestupně podle hodnoty. "facet=Category,count:3,sort:count" získá první tři kontejnery facetů ve výsledcích hledání, uvedené v sestupném pořadí podle počtu shod v každé kategorii. Pokud jsou první tři kategorie Budget, Extended-Stay a Luxury a Budget má 5 zásahů, Extended-Stay má 6 zásahů a Luxury má 4 zásahy, pak jsou skupiny hledisek seřazeny podle počtu zásahů jako Extended-Stay, Budget, Luxury. Dalším příkladem je"facet=Rating,sort:-value". Vytvoří aspekty pro všechny možné hodnoty hodnocení v sestupném pořadí podle jejich významnosti. Pokud jsou hodnocení od 1 do 5, aspekty jsou seřazeny 5, 4, 3, 2, 1, bez ohledu na to, kolik dokumentů odpovídá jednotlivým hodnocením.
values Poskytuje hodnoty pro štítky facety. Nastaví se na číselné hodnoty nebo Edm.DateTimeOffset hodnoty, které určují dynamickou sadu hodnot vstupních kritérií. Hodnoty musí být uvedeny v sekvenčním vzestupném pořadí, aby se získaly očekávané výsledky. "facet=baseRate,values:10 | 20" vytváří tři kategorie: jednu pro základní sazbu od 0 do 10 (mimo 10), jednu pro 10 do 20 (mimo 20) a jednu pro 20 a více. Řetězec "facet=lastRenovationDate,values:2024-02-01T00:00:00Z" vytvoří dva fasetové kbelíky: jeden pro hotely rekonstruované před únorem 2024 a jeden pro hotely rekonstruované 1. února 2024 nebo novější.
interval Poskytuje intervalovou posloupnost pro facety, které lze seskupit do intervalů. Celočíselná hodnota větší než nula pro čísla nebo minutu, hodinu, den, týden, měsíc, čtvrtletí, rok pro hodnoty data a času. "facet=baseRate,interval:100" vytváří kontejnery omezující vlastnosti na základě rozsahů základních sazeb o velikosti 100. Pokud jsou základní sazby mezi 60 a 600 dolary, existuje členění do intervalů pro 0–100, 100–200, 200–300, 300–400, 400–500 a 500–600. Řetězec "facet=lastRenovationDate,interval:year" vytváří jeden segment pro každý rok, kdy byl hotel rekonstruován.
timeoffset Určuje časový posun UTC tak, aby se zohlednil při nastavování časových hranic. Nastavit na ([+-]hh:mm, [+-]hhmm, or [+-]hh). Je-li použit, timeoffset parametr musí být kombinován s možností intervalu a pouze při použití u pole typu Edm.DateTimeOffset. "facet=lastRenovationDate,interval:day,timeoffset:-01:00" používá hranici dne, která začíná v 01:00:00 UTC (půlnoc v cílovém časovém pásmu).

count a sort mohou být kombinovány ve stejné specifikaci facety, ale nelze je kombinovat s interval nebo values.

interval a values nelze je kombinovat dohromady.

Intervalové fasety pro datum a čas se počítají na základě času UTC, pokud není timeoffset určeno. Například hranice dne pro "facet=lastRenovationDate,interval:day" začíná na 00:00:00 UTC.

Příklad základního aspektu

Následující fasetové dotazy pracují s indexem ukázek hotelů. K vložení dotazu JSON můžete použít zobrazení JSON v Průzkumníku služby Search. Nápovědu k tomu, jak začít, najdete v tématu Přidání fasetové navigace do výsledků hledání.

Tento první dotaz načte aspekty pro kategorie, hodnocení, značky a místnosti, které mají hodnoty baseRate, které spadají do konkrétních rozsahů. Všimněte si, že poslední aspekt se týká dílčího pole kolekce Rooms. Facets počítá nadřazený dokument (Hotely) a ne zprostředkující vnořené dokumenty (Pokoje), takže odpověď určuje počet hotelů, které mají jakékoliv pokoje v každé cenové kategorii.

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 
}  

Tento druhý příklad používá filtr k zúžení předchozího omezujícího výsledku dotazu poté, co uživatel vybere Hodnocení 3 a kategorii Motel.

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  
} 

Třetí příklad nastaví horní limit jedinečných termínů vrácených v dotazu. Výchozí hodnota je 10, ale tuto hodnotu můžete zvýšit nebo snížit pomocí parametru count u atributu faseta. Tento příklad vrátí fasety pro město, přičemž je omezen na 5.

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

Tento příklad ukazuje tři aspekty pro kategorii, značky a hodnocení s úpravou počtu u značek a úpravou rozsahu pro hodnocení, které je jinak uloženo jako datový typ double v indexu.

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
}

Pro každý fasetový navigační strom existuje výchozí limit 10 nejlepších instancí fasety, které byly nalezeny dotazem. Tato výchozí hodnota dává smysl pro navigační struktury, protože udržuje seznam hodnot na spravovatelnou velikost. Výchozí nastavení můžete přepsat přiřazením hodnoty k "count". Například "Tags,count:5" zmenšuje počet značek v oddílu Značky na prvních pět.

Pouze pro číselné hodnoty a hodnoty DateTime můžete explicitně nastavit hodnoty v poli omezující vlastnosti (například facet=Rating,values:1|2|3|4|5) a oddělit výsledky do souvislých oblastí (buď rozsahy založené na číselných hodnotách, nebo časových obdobích). Alternativně můžete přidat "interval", jako v facet=Rating,interval:1.

Každý rozsah je vytvořen s použitím 0 jako výchozího bodu, hodnoty ze seznamu jako koncového bodu a poté je od něj odečten předchozí rozsah, aby se vytvořily diskrétní intervaly.

Příklad jedinečných hodnot

Můžete formulovat dotaz, který vrátí jedinečný počet hodnot pro každé facetable pole. Tento příklad formuluje prázdný nebo nekvalifikovaný dotaz ("search": "*"), který odpovídá všem dokumentům, ale nastavením top na nulu získáte pouze počty bez výsledků.

Pro stručnost tento dotaz obsahuje pouze dvě pole označená jako facetable v indexu ukázek hotelů.

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

Výsledky z tohoto dotazu jsou následující:

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

Příklad fasetové hierarchie (Preview)

Pomocí rozhraní REST API latest preview nebo portálu Azure můžete nakonfigurovat fasetovou hierarchii pomocí operátorů > a ;.

Operátor Popis
> Operátor vnoření (hierarchický) označuje vztah nadřazeného a podřízeného objektu.
; Středník operátor označuje více polí na stejné úrovni vnoření, což jsou všechny podřízené položky stejného nadřazeného objektu. Nadřazený objekt musí obsahovat pouze jedno pole. Nadřazená i podřízená pole musí být facetable.

Pořadí operací ve výrazu s facety, který obsahuje hierarchie facety, je:

  • Operátor options (čárka ,), který odděluje parametry aspektu pro pole aspektu, například čárka v Rooms/BaseRate,values.
  • Závorky, například závorky ohraničující (Rooms/BaseRate,values:50 ; Rooms/Type).
  • Operátor vnoření (úhlová závorka >)
  • Operátor připojení (středník ;), který je ukázaný v druhém příkladu "Tags>(Rooms/BaseRate,values:50 ; Rooms/Type)" v této části, kde dvě podřízené fasety jsou rovnocenné pod nadřazeným prvkem Tags.

Všimněte si, že závorky se zpracovávají před vnořením a operacemi spojování: A > B ; C by byly jiné než A > (B ; C).

Existuje několik příkladů pro fasetové hierarchie. První příklad je dotaz, který vrací jenom několik dokumentů, což je užitečné pro zobrazení úplné odpovědi. Facety počítají nadřazený dokument (Hotely) a ne podřízené dokumenty (Místnosti), takže odpověď tedy určuje počet hotelů, které mají nějaké místnosti v každém fasetním kbelíku.

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 
}

Výsledky z tohoto dotazu jsou následující. Oba hotely mají bazén. Pro ostatní štítky poskytuje výhodu pouze jeden hotel.

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

Tento druhý příklad rozšiřuje předchozí tím, že ukazuje několik facety hlavní úrovni s více podřízenými prvky. Všimněte si, že operátor středníku (;) odděluje jednotlivé podřízené položky.

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 
}  

Částečná odpověď, zkrácená pro stručnost, zobrazuje značky s dílčími facety pro základní sazby a typ místnosti. V indexu ukázek hotelů mají oba hotely +ocean odpovídající každému typu pokoje a bazén.

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

Tento poslední příklad ukazuje pravidla precedence pro závorky, které ovlivňují úrovně vnoření. Předpokládejme, že chcete vrátit fasetovou hierarchii v tomto pořadí.

Address/StateProvince
  Address/City
    Category
    Rating

Pokud chcete tuto hierarchii vrátit, vytvořte dotaz, ve kterém jsou kategorie a hodnocení na stejné úrovni v části Adresa/město.

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

Pokud odeberete nejvnitřnější závorky, Kategorie a Hodnocení již nejsou „sourozenci", protože pravidla priority znamenají, že > operátor je vyhodnocen před ;.

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

Nadřazený objekt nejvyšší úrovně je stále Adresa/StateProvince, ale nyní Adresa/Město a hodnocení jsou na stejné úrovni.

Address/StateProvince
  Rating
  Address/City
    Category

Příklad filtrování podle faset (Preview)

Pomocí rozhraní REST API latest preview nebo portálu Azure můžete nakonfigurovat filtry omezujících vlastností.

Filtrování facety umožňuje omezit vrácené hodnoty jen na ty, které odpovídají zadanému regulárnímu výrazu. Dva nové parametry přijímají regulární výraz, který se použije u facetového pole.

  • includeTermFilter filtruje hodnoty vlastností na ty, které odpovídají regulárnímu výrazu.
  • excludeTermFilter filtruje hodnoty facety na ty, které neodpovídají regulárnímu výrazu.

Pokud řetězec facety splňuje obě podmínky, excludeTermFilter má přednost, protože sada řetězců skupin se nejprve vyhodnotí includeTermFilter a pak je vyloučena excludeTermFilter.

Vrátí se pouze hodnoty atributů, které odpovídají regulárnímu výrazu. Tyto parametry můžete zkombinovat s dalšími fasetovými možnostmi (například count, sort a hierarchické fasetování) v řetězcových polích.

Protože je regulární výraz vnořený do hodnoty řetězce JSON, musíte escapovat znaky dvojité uvozovky (") i zpětné lomítko (\). Samotný regulární výraz je oddělen lomítkem (/). Další informace o únikových vzorech naleznete v tématu Hledání regulárních výrazů.

Následující příklad ukazuje, jak předcházet speciálním znakům v regulárním výrazu, jako jsou zpětné lomítko, dvojité uvozovky nebo znaky regulárního výrazu.

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

Tady je příklad facety (filtru), která odpovídá hotelům kategorie Budget a Extended-Stay, přičemž hodnocení je podkategorií každé hotelové kategorie.

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 
} 

Následující příklad je zkrácená odpověď (dokumenty hotelu jsou vynechány pro stručnost).

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

Příklad agregace podle faset (Preview)

Pomocí nejnovějšího preview rozhraní REST API nebo portálu Azure můžete agregovat facety.

Agregace faset umožňují vypočítat metriky z fasetových hodnot. Schopnost agregace funguje společně s existujícími fasetovými možnostmi.

Agregátor Popis
Součet Vrátí celkovou kumulovanou hodnotu z pole ve všech dokumentech. Platí jenom pro číselné typy. Podporováno v dřívějších verzích Preview.
Min Vrátí minimální hodnotu z pole ve všech dokumentech. Platí jenom pro číselné typy.
Max Vrátí maximální hodnotu z pole ve všech dokumentech. Platí jenom pro číselné typy.
Průměrná Vrátí průměrnou hodnotu z pole ve všech dokumentech. Platí jenom pro číselné typy.
Kardinalita Vrátí přibližný počet jedinečných hodnot z pole ve všech dokumentech pomocí algoritmu HyperLogLog. Můžete požádat o cardinality fasetovatelná pole, včetně řetězcových a datumových polí (spolu s odpovídajícími formuláři kolekce).

Nastavení prahových hodnot přesnosti pro agregaci kardinality

U agregace kardinality můžete nastavit precisionThreshold možnost jako demaraci mezi počty, u které se očekává, že budou blízko přesné, a počty, které můžou být méně přesné. Maximální hodnota je 40 000. Výchozí hodnota je 3 000.

Filtrování se provádí v paměti. Zvýšení precisionThreshold způsobí vyšší spotřebu paměti (hodnota precisionThreshold vynásobená 8 byty).

Příklad: Agregace součástí součtu

Můžete sečíst libovolné omezující pole číselného datového typu (kromě vektorů a zeměpisných souřadnic).

Tady je příklad použití indexu s ukázkami hotelů. Pole Rooms/SleepsCount je fasetové a číselné, takže toto pole zvolíme k předvedení součtu. Pokud sečteme toto pole, získáme počet spánku pro celý hotel. Vzpomeňte si, že fasety počítají rodičovský dokument (Hotely) a ne zprostředkující vnořené dokumenty (Pokoje), takže odpověď sčítá hodnoty SleepsCount všech pokojů pro celý hotel. V tomto dotazu přidáme filtr pro součet SleepsCount pouze pro jeden hotel.

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
}

Odpověď pro dotaz může vypadat jako v následujícím příkladu. Windy Ocean Model může ubytovat celkem 40 hostů.

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

Příklad: Složená ze všech agregací

Tady je příklad použití hypotetického indexu facety, který zobrazuje syntaxi pro každou agregaci. Všimněte si, že v tomto příkladu má kardinalita další možnost precisionThreshold, kde výchozí hodnota je 3 000 a je nastavena na 40 000.

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

Odpověď pro dotaz může vypadat jako v následujícím příkladu.

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

Příklad: Zadejte výchozí hodnotu, která nahradí chybějící hodnoty.

Všechny metriky podporují zadání výchozí hodnoty, pokud dokument neobsahuje hodnotu.

  • Pro neřetědné typy (číselné, datum a čas, logická hodnota) nastavte default parametr na konkrétní hodnotu: "default: 42" .

  • U typů řetězců nastavte default parametr na řetězec oddělený pomocí jednoho oddělovače apostrofu: "default: 'mystringhere'".

Můžete přidat výchozí hodnotu, která se má použít, pokud dokument obsahuje hodnotu null pro toto pole: "facets": [ "Rooms/SleepsCount, metric: sum, default:2"]. Pokud má místnost hodnotu null pro pole Rooms/SleepsCount, výchozí hodnota nahradí chybějící hodnotu.

Tady je požadavek, který znázorňuje výchozí specifikaci pro každý typ pole.

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

U řetězcových polí je výchozí hodnota oddělená pomocí jednoho znaku uvozovky. Pro výjimku znak, předchází jej zpětným lomítkem '\\'. Všechny znaky jsou platné v rámci delimitérů řetězců. Ukončovací znak nemůže být zpětné lomítko.

Příklad: Více metrik ve stejném poli

Pokud podkladová data podporují případ použití, můžete pro stejné pole zadat více metrik.

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

Odpověď pro dotaz může vypadat jako v následujícím příkladu.

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

Další kroky

Znovu se podívejte na konfiguraci fasetové navigace pro nástroje a rozhraní API a projděte si osvědčené postupy pro práci s omezujícími vlastnostmi v kódu.

Doporučujeme jazyk C#: Přidání vyhledávání do webových aplikací pro příklad fasetové navigace, která obsahuje kód pro prezentační vrstvu. Ukázka také obsahuje filtry, návrhy a automatické dokončování. Pro prezentační vrstvu používá JavaScript a React.