참고
Azure AI 검색 Azure 포털, REST API 및 Azure SDK 통해 사용할 수 있습니다. 또한 엔터프라이즈 콘텐츠를 Microsoft Foundry 포털의 에이전트에 대해 재사용 가능한 사용 권한 인식 기술 자료로 변환하는 관리되는 기술 계층인 Foundry IQ를 뒷받침합니다.
Important
기능, 기능 또는 표시된 속성(미리 보기)은 서비스 수준 계약에 포함되지 않으며 프로덕션 워크로드에는 권장되지 않으며 일반적으로 사용 가능해지기 전에 변경되거나 제한될 수 있습니다. Azure AI 검색 미리 보기 용어는 독립 실행형 기능이든 일반 공급 기능의 일부이든 관계없이 모든 미리 보기 기능에 적용됩니다.
이 섹션에서는 기본 사용 및 기타 시나리오를 보여 주는 예제를 사용하여 패싯 탐색 구성 을 확장합니다.
패싯 가능 필드는 인덱스에 정의되어 있지만 패싯 매개 변수와 식은 쿼리 요청에 정의됩니다. 패싯 가능한 필드가 있는 인덱스가 있다면 기존 인덱스에서 패싯 계층 구조(미리 보기), 패싯 집계(미리 보기), 패싯 필터(미리 보기)를 사용해 볼 수 있습니다.
패싯 매개 변수 및 구문
API에 따라 패싯 쿼리는 일반적으로 검색 결과에 적용되는 패싯 식의 배열입니다. 각 패싯은 패싯에 사용 가능한 필드 이름을 포함하며, 필요 시 이름-값 쌍을 쉼표로 구분한 목록이 이어집니다.
- 패싯 쿼리 는 패싯 속성을 포함하는 쿼리 요청입니다.
-
필터링 가능 필드 는 검색 인덱스 내에서
facetable속성이 부여된 필드 정의를 의미합니다. - 개수 는 검색 결과에 있는 각 패싯의 일치 항목 수입니다.
다음 표에서는 예제에 사용되는 패싯 매개 변수에 대해 설명합니다.
| 패싯 매개 변수 | 설명 | 사용법 | 예제 |
|---|---|---|---|
count |
구조체당 패싯 용어의 최대 수입니다. | 정수. 기본값은 10입니다. 상한은 없지만 값이 높을수록 성능이 저하됩니다. 특히 패싯 필드에 고유한 용어가 많은 경우 성능이 저하됩니다. 이는 샤드에 걸쳐 패싯 쿼리가 분산되는 방식 때문입니다. 모든 샤드에 걸친 정확한 개수를 얻으려면 count 을 0으로 설정하거나, 패싯 계산이 가능한 필드의 고유값 개수 이상으로 설정하면 됩니다. 절충안의 결과로 대기 시간이 증가합니다. |
Tags,count:5 는 패싯 탐색 응답을 가장 많은 패싯 수를 포함하는 5개의 패싯 버킷으로 제한하지만 순서는 다를 수 있습니다. |
sort |
패싯 버킷의 순서를 결정합니다. | 유효한 값은 count, -count, value-value.
count을 사용하여 가장 큰 패싯부터 가장 작은 패싯까지 나열하십시오. 오름차순으로 정렬하는 데 사용합니다 -count (가장 작음에서 가장 큽니다). 패싯 값을 오름차순으로 영숫자순으로 정렬하는 데 사용합니다 value . 값으로 내림차순을 정렬하는 데 사용합니다 -value . |
"facet=Category,count:3,sort:count" 는 각 범주의 일치 항목 수에 따라 내림차순으로 나열된 검색 결과에서 상위 3개의 패싯 버킷을 가져옵니다. 상위 3개 범주가 예산(5개), 연장 숙박(6개), 럭셔리(4개)로 구성된 경우, 패싯 버킷은 항목 수가 가장 많은 순서에 따라 연장 숙박, 예산, 럭셔리 순으로 정렬됩니다. 또 다른 예는 다음과 같습니다"facet=Rating,sort:-value". 가능한 모든 등급에 대한 패싯을 값별로 내림차순으로 생성합니다. 등급이 1에서 5까지인 경우 각 등급과 일치하는 문서 수에 관계없이 패싯의 순서는 5, 4, 3, 2, 1입니다. |
values |
패싯 레이블에 대한 값을 제공합니다. | 파이프로 구분된 숫자 또는 Edm.DateTimeOffset 값을 사용하여 패싯 항목 값의 동적 집합을 지정합니다. 예상 결과를 얻으려면 값을 순차적으로 오름차순으로 나열해야 합니다. |
"facet=baseRate,values:10 | 20"는 세 개의 패싯 버킷을 생성합니다. 첫 번째는 기본 속도 0에서 10 미만, 두 번째는 10에서 20 미만, 세 번째는 20 이상입니다. 문자열 "facet=lastRenovationDate,values:2024-02-01T00:00:00Z" 은 2024년 2월 이전에 개조된 호텔용 버킷과 2024년 2월 1일 이후 개조된 호텔용 버킷 등 두 개의 패싯 버킷을 생성합니다. |
interval |
간격 기준으로 그룹화할 수 있는 패싯에 사용할 간격 시퀀스를 제공합니다. | 날짜 시간 값에 대한 숫자 또는 분, 시간, 일, 주, 월, 분기, 연도의 경우 0보다 큰 정수 간격입니다. |
"facet=baseRate,interval:100" 는 크기 100의 기본 속도 범위를 기반으로 패싯 버킷을 생성합니다. 기본 요금이 모두 $60에서 $600 사이인 경우 0-100, 100-200, 200-300, 300-400, 400-500 및 500-600에 대한 패싯 버킷이 있습니다. 이 문자열 "facet=lastRenovationDate,interval:year" 은 호텔이 개조된 해마다 하나의 패싯 버킷을 생성합니다. |
timeoffset |
시간 경계를 설정할 때 고려할 UTC 시간 오프셋을 지정합니다. |
[+-]hh:mm, [+-]hhmm, or [+-]hh로 설정합니다. 매개 변수를 사용하는 경우 매개 변수를 timeoffset 간격 옵션과 결합해야 하며 형식 Edm.DateTimeOffset필드에 적용된 경우에만 사용해야 합니다. |
"facet=lastRenovationDate,interval:day,timeoffset:-01:00" 는 01:00:00 UTC(대상 표준 시간대의 자정)에 시작하는 일 경계를 사용합니다. |
count와 sort는 같은 패싯 사양에서 결합할 수 있지만, interval 또는 values와는 결합할 수 없습니다.
interval와 values는 함께 결합할 수 없습니다.
지정되지 않은 경우 timeoffset 날짜 시간의 간격 패싯은 UTC 시간을 기준으로 계산됩니다. 예를 들어 "facet=lastRenovationDate,interval:day"날짜 경계는 00:00:00 UTC에서 시작됩니다.
기본 패싯 예제
다음 패싯 쿼리는 호텔 샘플 인덱스에 대해 작동합니다. 검색 탐색기에서 JSON 보기를 사용하여 JSON 쿼리에 붙여넣을 수 있습니다. 시작에 대한 도움말은 검색 결과에 패싯 탐색 추가를 참조하세요.
첫 번째 쿼리는 카테고리, 평점, 태그를 비롯하여 기준 요금이 특정 범위 내에 있는 객실 정보를 분류하여 가져옵니다. 마지막 패싯은 객실 컬렉션의 하위 필드에 포함되어 있습니다. 패싯은 중간 하위 문서(객실)가 아닌 상위 문서(호텔)를 계산하므로 응답에 따라 각 가격 책정 범주에 객실이 있는 호텔 수가 결정됩니다.
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
}
이 두 번째 예제에서는 필터를 사용하여 사용자가 등급 3 및 범주 "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
}
세 번째 예제에서는 쿼리에서 반환된 고유한 용어에 대한 상한을 설정합니다. 기본값은 10이지만 패싯 특성의 count 매개 변수를 사용하여 이 값을 늘리거나 줄일 수 있습니다. 도시 패싯을 5개로 제한하여 반환하는 예제입니다.
POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{
"search": "view",
"facets": [ "Address/City,count:5" ],
"count": true
}
이 예제는 "Category", "Tags", 및 "Rating"의 세 가지 면을 보여줍니다. 여기서 "Tags"에는 개수 수정이, "Rating"에는 범위 수정이 적용되며, 그렇지 않으면 인덱스에 double로 저장됩니다.
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
}
각 패싯 탐색 트리에 대해 쿼리에서 찾은 상위 10개 패싯 인스턴스의 기본 제한이 있습니다. 이 기본값은 값 목록을 관리 가능한 크기로 유지하므로 탐색 구조에 적합합니다. "count"에 값을 할당하여 기본값을 재정의할 수 있습니다. 예를 들어 태그 "Tags,count:5" 섹션 아래의 태그 수를 상위 5개로 줄입니다.
숫자 및 DateTime 값의 경우에만 패싯 필드에 값을 명시적으로 설정하여 결과를 연속 범위( facet=Rating,values:1|2|3|4|5숫자 값 또는 기간 기반 범위)로 구분할 수 있습니다. 또는 다음과 같이 facet=Rating,interval:1"interval"을 추가할 수 있습니다.
각 범위는 0을 시작점으로, 목록의 값을 엔드포인트로 사용하여 빌드한 다음, 이전 범위를 트리밍하여 불연속 간격을 만듭니다.
고유 값 예제
각 패싯 가능한 필드에 대해 고유 값의 수를 반환하는 쿼리를 작성할 수 있습니다. 이 예제에서는 모든 문서에서 일치하는 빈 쿼리 또는 정규화되지 않은 쿼리("search": "*")를 작성하지만 0으로 설정 top 하면 결과 없이 개수만 가져옵니다.
간단히 하기 위해 이 쿼리에는 호텔 샘플 인덱스로 facetable 표시된 두 개의 필드만 포함됩니다.
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""
]
}
이 쿼리의 결과는 다음과 같습니다.
{
"@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": []
}
패싯 계층 예제(미리 보기)
latest 미리 보기 REST API 또는 Azure 포털을 사용하여 > 및 ; 연산자를 사용하여 패싯 계층 구조를 구성할 수 있습니다.
| 연산자 | 설명 |
|---|---|
> |
중첩(계층 구조) 연산자는 부모와 자식 사이의 관계를 표현합니다. |
; |
세미콜론 연산자는 같은 부모를 두고 같은 중첩 수준에 있는 여러 필드를 한꺼번에 표시합니다. 부모는 하나의 필드만 포함해야 합니다. 부모 필드와 자식 필드는 모두 facetable여야 합니다. |
패싯 계층 구조를 포함하는 패싯 식의 연산 순서는 다음과 같습니다.
- 패싯 필드의 패싯 매개변수를 구분하는 옵션 연산자(쉼표
,)로,Rooms/BaseRate,values에서 쉼표가 이에 해당합니다. - 특정 괄호, 예를 들어
(Rooms/BaseRate,values:50 ; Rooms/Type)를 감싸는 괄호. - 중첩 연산자(각진 대괄호
>) - 이 섹션의 두 번째 예제
;에서 설명하는 추가 연산자(세미콜론"Tags>(Rooms/BaseRate,values:50 ; Rooms/Type)")는 Tags 부모 아래에서 두 자식 패싯이 동등한 관계를 갖도록 합니다.
괄호가 중첩 및 추가 작업 전에 처리되니 주의하세요: A > B ; C는 A > (B ; C)와 다릅니다.
패싯 계층 구조에 대한 몇 가지 예가 있습니다. 첫 번째 예제는 전체 응답을 보는 데 유용한 몇 가지 문서만 반환하는 쿼리입니다. 패싯은 중간 하위 문서(객실)가 아닌 부모 문서(호텔)의 수를 계산하므로 응답에 따라 각 패싯 버킷에 객실이 있는 호텔 수가 결정됩니다.
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
}
이 쿼리의 결과는 다음과 같습니다. 두 호텔 모두 수영장이 있습니다. 다른 태그의 경우 한 호텔만 편의 시설을 제공합니다.
{
"@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"
}
}
]
}
두 번째 예제에서는 이전 패싯을 확장해, 여러 자식 패싯을 갖는 여러 최상위 패싯을 보여 줍니다. 세미콜론(;) 연산자는 각 자식을 구분합니다.
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
}
간결하게 정리된 응답에는 객실의 기본 요금과 유형을 확인할 수 있는 자식 패싯 태그가 표시됩니다. 호텔-샘플 인덱스에서 +ocean와 일치하는 두 호텔은 각 유형의 객실과 수영장을 가지고 있습니다.
{
"@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
}
]
}}]},
...
}
이 마지막 예제에서는 중첩 수준에 영향을 주는 괄호에 대한 우선 순위 규칙을 보여 줍니다. 패싯 계층 구조를 이 순서대로 반환하려는 경우를 가정해 보겠습니다.
Address/StateProvince
Address/City
Category
Rating
이 계층을 반환하려면 주소/도시 아래에 범주와 등급이 동일 계층에 있도록 쿼리를 작성하십시오.
{
"search": "beach",
"facets": [
"Address/StateProvince > (Address/City > (Category ; Rating))"
],
"select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
"count": true
}
가장 안쪽 괄호를 제거하면, 선행 규칙에 따라 > 연산자가 ;보다 먼저 평가되기 때문에 범주와 등급은 더 이상 같은 수준에 있지 않습니다.
{
"search": "beach",
"facets": [
"Address/StateProvince > (Address/City > Category ; Rating)"
],
"select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
"count": true
}
최상위 부모는 여전히 Address/StateProvince이지만 이제 Address/City와 Rating이 동일한 수준에 있습니다.
Address/StateProvince
Rating
Address/City
Category
패싯 필터링 예제(미리 보기)
최신 미리 보기 REST API 또는 Azure 포털을 사용하여 페셋 필터를 구성할 수 있습니다.
패싯 필터링을 사용하면 지정된 정규식과 일치하는 패싯 값으로 반환되는 패싯 값을 제한할 수 있습니다. 두 개의 새 매개 변수는 패싯 필드에 적용되는 정규식을 허용합니다.
-
includeTermFilter는 패싯 값을 정규식과 일치하는 값으로 필터링합니다. -
excludeTermFilter는 패싯 값을 정규식과 일치하지 않는 값으로 필터링합니다.
두 조건을 모두 충족하는 패싯 문자열의 경우, 버킷 문자열 집합은 먼저 excludeTermFilter으로 평가되고 나서 includeTermFilter으로 제외되기 때문에 excludeTermFilter가 우선권을 가집니다.
정규식과 일치하는 패싯 값만 반환됩니다. 이러한 매개 변수를 문자열 필드의 다른 패싯 옵션(예: count, sort및 계층적 패싯)과 결합할 수 있습니다.
정규식은 JSON 문자열 값 내에 중첩되므로 큰따옴표(")와 백슬래시(\) 문자를 모두 이스케이프해야 합니다. 정규식 자체는 슬래시(/)로 구분됩니다. 이스케이프 패턴에 대한 자세한 내용은 정규식 검색을 참조하세요.
다음 예제에서는 백슬래시, 큰따옴표 또는 정규식 구문 문자와 같은 정규식에서 특수 문자를 이스케이프하는 방법을 보여 줍니다.
{
"search": "*",
"facets": ["name,includeTermFilter:/EscapeBackslash\\\OrDoubleQuote\\"OrRegexCharacter\\(/"]
}
다음은 예산 호텔과 장기 투숙 호텔에 적용할 수 있는 패싯 필터의 예시로, 각 호텔 범주 아래에 등급이 하위 요소로 포함되어 있습니다.
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
}
다음 예제는 축약된 응답입니다(호텔 문서는 간결하게 생략됨).
{
"@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 ]
}
패싯 집계 예제(미리 보기)
최신 프리뷰 REST API나 Azure 포털을 사용하여 패싯을 집계할 수 있습니다.
패싯 집계를 사용하면 패싯 값에서 메트릭을 계산할 수 있습니다. 집계 기능은 기존의 특성 분류 옵션과 함께 작동합니다.
| 애그리게이터 | 설명 |
|---|---|
| 합계 | 모든 문서에서 필드의 누적된 총 값을 반환합니다. 숫자 형식에만 적용됩니다. 이전 미리 보기 릴리스에서 지원됩니다. |
| 분 | 모든 문서에서 필드의 최소값을 반환합니다. 숫자 형식에만 적용됩니다. |
| 최대값 | 모든 문서에서 필드의 최대값을 반환합니다. 숫자 형식에만 적용됩니다. |
| 평균 | 모든 문서에서 필드의 평균 값을 반환합니다. 숫자 형식에만 적용됩니다. |
| 카디널리티 |
HyperLogLog 알고리즘을 사용하여 모든 문서에서 필드의 대략적인 고유 값 수를 반환합니다. 문자열 및 날짜/시간 필드(해당 컬렉션 형식과 함께)를 포함한 패싯 가능 필드에서 cardinality를 요청할 수 있습니다. |
카디널리티 집계의 정밀도 임계값 설정
카디널리티 집계의 경우, 정확하다고 기대하는 개수와 덜 정확할 수 있는 개수 간의 경계로 precisionThreshold 옵션을 설정할 수 있습니다. 최대값은 40,000입니다. 기본값은 3,000입니다.
패시팅은 메모리에서 수행됩니다. 증가하면 precisionThreshold 메모리 사용량이 증가합니다(값에 precisionThreshold 8바이트 곱함).
예: 합계 패싯 집계
벡터와 지리적 좌표를 제외한 숫자형 패싯 필드는 합계로 집계할 수 있습니다.
다음은 호텔 샘플 인덱스 사용 예제입니다. Rooms/SleepsCount 필드는 숫자형 패싯 필드이므로, 합계가 표시되도록 이 필드를 선택합니다. 그 필드를 합치면 전체 호텔의 수면 횟수를 얻을 수 있습니다. 패싯은 중간 하위 문서(객실)가 아닌 부모 문서(호텔)의 수를 계산하므로 응답은 호텔 전체의 모든 객실의 SleepsCount를 합산합니다. 이 쿼리에서는 필터를 추가하여 한 호텔에 대한 SleepsCount의 합계를 계산합니다.
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
}
쿼리에 대한 응답은 다음 예제와 같을 수 있습니다. 윈디 오션 모델은 총 40명의 손님을 수용할 수 있습니다.
{
"@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
}
]
}
]
}
예: 모든 집계의 복합
다음은 각 집계의 구문을 보여 주는 가상의 '패싯' 인덱스를 사용하는 예제입니다. 이 예제에서는 카디널리티에 추가 precisionThreshold 옵션(기본값: 3,000)이 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"
]
}
쿼리에 대한 응답은 다음 예제와 같을 수 있습니다.
{
"@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
}
]
}
}
예: 누락된 값을 대체할 기본값 지정
모든 메트릭은 문서에 값이 없는 경우 기본값 지정을 지원합니다.
문자열이 아닌 형식(숫자, 날짜/시간, 부울)의 경우 매개 변수를
default특정 값"default: 42"으로 설정합니다.문자열 형식의
default경우 단일 아포스트로피 구분 기호"default: 'mystringhere'"를 사용하여 구분 기호로 구분된 문자열로 매개 변수를 설정합니다.
문서에 해당 필드 "facets": [ "Rooms/SleepsCount, metric: sum, default:2"]의 null이 포함된 경우 사용할 기본값을 추가할 수 있습니다. 룸/SleepsCount 필드에 null 값이 존재하는 경우, 해당 누락된 값은 기본값으로 자동 대체됩니다.
각 필드 형식의 기본 사양을 보여 주는 요청은 다음과 같습니다.
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"
]
}
문자열 필드의 경우 기본값은 작은따옴표 문자를 사용하여 구분됩니다. 문자를 이스케이프하려면 백슬래시 "'"를 접두사로 지정합니다. 모든 문자는 문자열 구분 기호 내에서 유효합니다. 종료 문자는 백슬래시일 수 없습니다.
예: 동일한 필드에 있는 여러 메트릭
기본 데이터가 사용 사례를 지원하는 경우 동일한 필드에 여러 메트릭을 지정할 수 있습니다.
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"
]
}
쿼리에 대한 응답은 다음 예제와 같을 수 있습니다.
{
"@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
}
]
}
}
다음 단계
도구 및 API에 대한 패싯 탐색 구성 을 다시 검토하고 코드에서 패싯 작업에 대한 모범 사례를 검토합니다.
C#: 웹앱에 검색 추가는 프레젠테이션 계층의 코드를 포함한 패싯 탐색의 예제로 추천합니다. 샘플에는 필터, 제안 및 자동 완성도 포함되어 있습니다. 프레젠테이션 계층에 JavaScript 및 React를 사용합니다.