Azure AI Search에서 의미 체계 순위로 쿼리 다시 쓰기(미리 보기)
참고 항목
이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
쿼리 다시 쓰기는 사용자의 쿼리를 보다 효과적인 쿼리로 변환하고, 용어를 더 추가하고, 검색 결과를 구체화하는 프로세스입니다. 검색 서비스는 대체 쿼리를 생성하는 생성 모델에 검색 쿼리(또는 변형)를 보냅니다.
쿼리 다시 쓰기는 사용자 쿼리에서 오타 또는 맞춤법 오류를 수정하고 동의어를 사용하여 쿼리를 확장하여 의미 체계 순위 의 결과를 향상시킵니다.
쿼리를 다시 작성하는 검색은 다음과 같이 작동합니다.
- 사용자 쿼리는 요청의
search
속성을 통해 전송됩니다. - 검색 서비스는 대체 쿼리를 생성하는 생성 모델에 검색 쿼리(또는 변형)를 보냅니다.
- 검색 서비스는 원래 쿼리와 다시 작성된 쿼리를 사용하여 검색 결과를 검색합니다.
쿼리 다시 쓰기는 선택적 기능입니다. 쿼리를 다시 작성하지 않으면 검색 서비스는 원래 쿼리를 사용하여 검색 결과를 검색합니다.
참고 항목
다시 작성된 쿼리에 원래 쿼리의 정확한 용어가 모두 포함되지 않을 수 있습니다. 이는 쿼리가 고유 식별자 또는 제품 코드에 대해 매우 구체적이고 정확한 일치가 필요한 경우 검색 결과에 영향을 줄 수 있습니다.
필수 조건
- 검색 서비스, 기본 계층 이상.
참고 항목
쿼리 다시 쓰기는 현재 북유럽 및 동남 아시아 지역에서 사용할 수 있습니다.
Important
의미 체계 순위는 현재 쿼리 다시 쓰기에 필요합니다.
의미 체계 구성 및 서식 있는 텍스트 콘텐츠가 있는 기존 검색 인덱스. 이 가이드의 예제에서는 hotels-sample-index 샘플 데이터를 사용하여 쿼리 재작성을 보여 줍니다. 사용자 고유의 데이터와 인덱스로 쿼리 재작성을 테스트할 수 있습니다.
REST API 요청을 지원하는 웹 클라이언트가 필요합니다. 이 가이드의 예제는 REST 클라이언트 확장을 사용하여 Visual Studio Code를 사용하여 테스트되었습니다.
팁
설명 또는 정의가 포함된 콘텐츠는 의미 체계 순위에 가장 적합합니다.
쿼리 다시 쓰기를 사용하여 검색 요청 만들기
이 REST API 예제에서는 검색 문서를 사용하여 요청을 작성합니다. 요청 및 응답 속성에 대한 자세한 내용은 API 참조 설명서를 참조 하세요.
다음 요청을 웹 클라이언트에 템플릿으로 붙여넣습니다.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview { "search": "newer hotel near the water with a great restaurant", "semanticConfiguration":"en-semantic-config", "queryType":"semantic", "queryRewrites":"generative|count-5", "queryLanguage":"en-US", "debug":"queryRewrites", "top": 1 }
검색 서비스 이름으로 대체
search-service-name
합니다.다른 경우 인덱스 이름으로 대체
hotels-sample-index
합니다."검색"을 전체 텍스트 검색 쿼리로 설정합니다. 벡터 쿼리를 지정 하지 않는 한 쿼리를 다시 작성하는 데 검색 속성이 필요합니다. 벡터 쿼리를 지정하는 경우 "검색" 텍스트가 개체의
"vectorQueries"
속성과"text"
일치해야 합니다. 검색 문자열은 단순한 구문 또는 전체 Lucene 구문을 지원할 수 있습니다."semanticConfiguration" 을 인덱스로 포함된 미리 정의된 의미 체계 구성 으로 설정합니다.
"queryType"을 "의미 체계"로 설정합니다. "queryType"을 "semantic"으로 설정하거나 요청에 불필요한 "semanticQuery" 속성을 포함해야 합니다. 쿼리를 다시 작성하려면 의미 체계 순위 가 필요합니다.
"queryRewrites"를 "generative|count-5"로 설정하여 최대 5개의 쿼리 재작성을 얻습니다. 개수를 1에서 10 사이의 값으로 설정할 수 있습니다.
"queryRewrites" 속성을 설정하여 쿼리 다시 쓰기를 요청했으므로 "queryLanguage"를 검색 텍스트 언어로 설정해야 합니다. Search 서비스는 쿼리 다시 쓰기에 동일한 언어를 사용합니다. 이 예제에서는 "en-US"를 사용합니다. 지원되는 로캘은 다음과
id-ID
et-EE
eu-ES
bg-BG
ar-SA
ca-ES
bn-IN
cs-CZ
da-DK
de-DE
el-GR
es-ES
ar-MA
fa-AE
es-MX
fi-FI
fr-CA
fr-FR
ga-IE
gl-ES
ar-KW
he-IL
gu-IN
hi-IN
hr-BA
hr-HR
hu-HU
hy-AM
ar-JO
it-IT
is-IS
ja-JP
nb-NO
nl-BE
ms-MY
ms-BN
mr-IN
nl-NL
ml-IN
lv-LV
lt-LT
no-NO
ko-KR
kn-IN
ar-EG
pa-IN
pl-PL
ro-RO
pt-PT
ru-RU
pt-BR
sk-SK
en-US
sr-ME
en-CA
sr-BA
en-GB
sl-SL
en-IN
같습니다.en-AU
sr-RS
,sv-SE
,ta-IN
,te-IN
,th-TH
,tr-TR
,uk-UA
,ur-PK
vi-VN
,zh-CN
zh-TW
."debug"를 "queryRewrites"로 설정하여 응답에서 쿼리를 다시 작성합니다.
팁
테스트 목적으로만 설정
"debug": "queryRewrites"
됩니다. 성능을 향상시키려면 프로덕션 환경에서 디버그를 사용하지 마세요.상위 검색 결과만 반환하도록 "top"을 1로 설정합니다.
요청을 보내 쿼리를 실행하고 결과를 반환합니다.
다음으로 쿼리를 다시 작성하여 검색 결과를 평가합니다.
응답 평가
다음은 쿼리 다시 쓰기를 포함하는 응답의 예입니다.
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "newer hotel near the water with a great restaurant",
"rewrites": [
"new waterfront hotels with top-rated eateries",
"new waterfront hotels with top-rated restaurants",
"new waterfront hotels with excellent dining",
"new waterfront hotels with top-rated dining",
"new water-side hotels with top-rated restaurants"
]
},
"vectors": []
}
},
"value": [
{
"@search.score": 58.992092,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"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.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
다음은 주의해야 할 몇 가지 주요 사항입니다.
- 테스트를 위해 "debug" 속성을 "queryRewrites"로 설정했으므로 응답에는 텍스트 입력 쿼리 및 쿼리 다시 쓰기가 포함된
@search.debug
개체가 포함됩니다. - "queryRewrites" 속성을 "generative|count-5"로 설정했으므로 응답에는 최대 5개의 쿼리 다시 쓰기가 포함됩니다.
- 값은
"inputQuery"
쿼리 다시 쓰기를 위해 생성 모델로 전송되는 쿼리입니다. 입력 쿼리가 항상 사용자의"search"
쿼리와 동일하지는 않습니다.
다음은 쿼리를 다시 작성하지 않은 응답의 예입니다.
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "",
"rewrites": []
},
"vectors": []
}
},
"value": [
{
"@search.score": 7.774868,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"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.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
쿼리 다시 쓰기를 사용하는 벡터 쿼리
검색 요청에 벡터 쿼리를 포함하여 키워드 검색과 벡터 검색을 단일 요청 및 통합 응답으로 결합할 수 있습니다.
다음은 쿼리를 다시 작성하는 벡터 쿼리를 포함하는 쿼리의 예입니다. 벡터 쿼리를 포함하도록 이전 예제 를 수정합니다.
- 요청에 "vectorQueries" 개체를 추가합니다. 이 개체에는 "kind"가 "text"로 설정된 벡터 쿼리가 포함됩니다.
- "text" 값은 "search" 값과 같습니다. 쿼리 다시 쓰기가 작동하려면 이러한 값이 동일해야 합니다.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
{
"search": "newer hotel near the water with a great restaurant",
"vectorQueries": [
{
"kind": "text",
"text": "newer hotel near the water with a great restaurant",
"k": 50,
"fields": "Description",
"queryRewrites": "generative|count-3"
}
],
"semanticConfiguration":"en-semantic-config",
"queryType":"semantic",
"queryRewrites":"generative|count-5",
"queryLanguage":"en-US",
"top": 1
}
응답에는 텍스트 쿼리와 벡터 쿼리 모두에 대한 쿼리 다시 쓰기가 포함됩니다.
디버그를 사용하여 쿼리 다시 쓰기 테스트
쿼리 다시 쓰기를 테스트하여 예상대로 작동하는지 확인해야 합니다. 쿼리 요청의 "debug": "queryRewrites"
속성을 설정하여 쿼리를 응답에 다시 작성합니다. 설정 "debug"
은 테스트 목적으로 선택 사항입니다. 성능을 향상시키려면 프로덕션 환경에서 이 속성을 설정하지 마세요.
부분 응답 이유
디버그(테스트) 응답에 해당 및 vectors
속성에 대한 빈 배열이 포함되는 것을 text.rewrites
확인할 수 있습니다.
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"rewrites": []
},
"vectors": []
}
},
"@search.semanticPartialResponseReason": "Transient",
"@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
//... more properties redacted for brevity
}
앞의 예에서:
- 응답에는 값이
@search.semanticPartialResponseReason
"Transient"인 속성이 포함됩니다. 이 메시지는 하나 이상의 쿼리를 완료하지 못했음을 의미합니다. - 응답에는 값이
@search.semanticQueryRewriteResultType
"OriginalQueryOnly"인 속성도 포함됩니다. 이 메시지는 쿼리 다시 쓰기를 사용할 수 없음을 의미합니다. 원래 쿼리만 검색 결과를 검색하는 데 사용됩니다.
다음 단계
의미 체계 순위는 키워드 검색과 벡터 검색을 단일 요청 및 통합 응답으로 결합하는 하이브리드 쿼리에서 사용할 수 있습니다.