Guida introduttiva: Ricerca vettoriale con REST
Informazioni su come usare le API REST di ricerca per creare, caricare ed eseguire query sui vettori in Ricerca di intelligenza artificiale di Azure.
In Azure AI Search, un archivio vettoriale ha uno schema di indice che definisce campi vettoriali e non vettoriali, una configurazione vettoriale per algoritmi che creano lo spazio di incorporamento e le impostazioni sulle definizioni di campo vettoriale usate nelle richieste di query. L'API Crea indice crea l'archivio vettoriale.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Nota
Questo argomento della Guida introduttiva omette il passaggio di vettorizzazione e fornisce incorporamenti in documenti di esempio. Se si desidera aggiungere la suddivisione in blocchi e la vettorizzazione dei dati predefiniti del contenuto, eseguire la procedura guidata di importazione e vettorizzazione dei dati che illustra i passaggi necessari.
Prerequisiti
Visual Studio Code con un client REST. Per informazioni introduttive, vedere Guida introduttiva: Ricerca di testo con REST.
Azure AI Search, in qualsiasi area e a qualsiasi livello di servizio. È possibile usare il livello gratuito per questa guida introduttiva, ma è consigliabile usare Basic o versione successiva per i file di dati di dimensioni maggiori. Creare o trovare una risorsa di Ricerca intelligenza artificiale di Azure esistente nella sottoscrizione corrente.
La maggior parte dei servizi esistenti supporta la ricerca vettoriale. Per un piccolo subset di servizi creato prima di gennaio 2019, un indice che contiene campi vettoriali non riesce alla creazione. In questo caso, è necessario creare un nuovo servizio.
Facoltativamente, per eseguire l'esempio di query che richiama la riclassificazione semantica, il servizio di ricerca deve essere il livello Basic o superiore, con il classificatore semantico abilitato.
Facoltativamente, una risorsa OpenAI di Azure con una distribuzione di
text-embedding-ada-002
. Il file.rest
di origine include un passaggio facoltativo per la generazione di nuovi incorporamenti di testo, ma vengono forniti incorporamenti pregenerati in modo da omettere questa dipendenza.
Scaricare i file
Scaricare un esempio REST da GitHub per inviare le richieste in questa guida introduttiva. Per altre informazioni, vedere Download di file da GitHub.
È anche possibile avviare un nuovo file nel sistema locale e creare richieste manualmente seguendo le istruzioni riportate in questo articolo.
Ottenere un endpoint del servizio di ricerca
È possibile trovare l'endpoint del servizio di ricerca nel portale di Azure.
Accedere al portale di Azure e trovare il servizio di ricerca.
Nella home page Panoramica trovare l'URL. Un endpoint di esempio potrebbe essere simile a
https://mydemo.search.windows.net
.
Questo endpoint viene incollato nel file .rest
o .http
in un passaggio successivo.
Configurare l'accesso
Le richieste all'endpoint di ricerca devono essere autenticate e autorizzate. È possibile usare chiavi API o ruoli per questa attività. Le chiavi sono più facili da iniziare, ma i ruoli sono più sicuri.
Per una connessione basata su ruoli, le istruzioni seguenti contengono la connessione a Ricerca di intelligenza artificiale di Azure con l'identità, non l'identità di un'app client.
Opzione 1: Usare le chiavi
Selezionare Impostazioni>Chiavi e quindi copiare una chiave di amministratore. Le chiavi di amministrazione vengono usate per aggiungere, modificare ed eliminare oggetti. Sono disponibili due chiavi amministratore intercambiabili. Copiarne una. Per altre informazioni, vedere Connettersi a Azure AI Search usando l'autenticazione con chiave.
Questa chiave viene incollata nel file .rest
o .http
in un passaggio successivo.
Opzione 2: Usare i ruoli
Assicurarsi che il servizio di ricerca sia configurato per l'accesso basato sul ruolo. È necessario avere assegnazioni di ruolo preconfigurate per l'accesso agli sviluppatori. Le assegnazioni di ruolo devono concedere l'autorizzazione per creare, caricare ed eseguire query su un indice di ricerca.
In questa sezione ottenere il token di identità personale usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
Accedere all'interfaccia della riga di comando di Azure.
az login
Ottenere il token di identità personale.
az account get-access-token --scope https://search.azure.com/.default
Il token di identità personale viene incollato nel file .rest
o .http
in un passaggio successivo.
Nota
Questa sezione presuppone che si stia usando un client locale che si connette a Ricerca di intelligenza artificiale di Azure per conto dell'utente. Un approccio alternativo consiste nell'ottenere un token per l'app client, presupponendo che l'applicazione sia registrata con Microsoft Entra ID.
Creare un indice vettoriale
Creare un indice (REST) crea un indice vettoriale e configura le strutture di dati fisici nel servizio di ricerca.
Lo schema dell'indice è organizzato in base al contenuto dell'hotel. I dati di esempio sono costituiti da nomi vettoriali e non vettoriali e descrizioni di sette hotel fittizi. Questo schema include configurazioni per l'indicizzazione vettoriale e le query e per la classificazione semantica.
Aprire un nuovo file di testo in Visual Studio Code.
Impostare le variabili sui valori raccolti in precedenza. Questo esempio usa un token di identità personale.
@baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE @token = PUT-YOUR-PERSONAL-IDENTITY-TOKEN-HERE
Salvare il file con un'estensione
.rest
o.http
.Incollare l'esempio seguente per creare l'indice
hotels-vector-quickstart
nel servizio di ricerca.### Create a new index POST {{baseUrl}}/indexes?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json Authorization: Bearer {{token}} { "name": "hotels-vector-quickstart", "fields": [ { "name": "HotelId", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": false, "key": true }, { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": true, "facetable": false }, { "name": "HotelNameVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile" }, { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false }, { "name": "DescriptionVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile" }, { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "retrievable": true, "sortable": false, "facetable": true }, { "name": "Address", "type": "Edm.ComplexType", "fields": [ { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }, { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true } ] }, { "name": "Location", "type": "Edm.GeographyPoint", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": false } ], "vectorSearch": { "algorithms": [ { "name": "my-hnsw-vector-config-1", "kind": "hnsw", "hnswParameters": { "m": 4, "efConstruction": 400, "efSearch": 500, "metric": "cosine" } }, { "name": "my-hnsw-vector-config-2", "kind": "hnsw", "hnswParameters": { "m": 4, "metric": "euclidean" } }, { "name": "my-eknn-vector-config", "kind": "exhaustiveKnn", "exhaustiveKnnParameters": { "metric": "cosine" } } ], "profiles": [ { "name": "my-vector-profile", "algorithm": "my-hnsw-vector-config-1" } ] }, "semantic": { "configurations": [ { "name": "my-semantic-config", "prioritizedFields": { "titleField": { "fieldName": "HotelName" }, "prioritizedContentFields": [ { "fieldName": "Description" } ], "prioritizedKeywordsFields": [ { "fieldName": "Tags" } ] } } ] } }
Selezionare Invia richiesta. Tenere presente che è necessario il client REST per inviare richieste. Si dovrebbe avere una risposta
HTTP/1.1 201 Created
. Il corpo della risposta deve includere la rappresentazione JSON dello schema dell'indice.Punti chiave:
- La raccolta
fields
include un campo chiave obbligatorio e campi di testo e vettore (ad esempioDescription
eDescriptionVector
) per la ricerca di testo e vettore. Il colocating di campi vettoriali e non vettoriali nello stesso indice consente query ibride. Ad esempio, è possibile combinare filtri, ricerca di testo con classificazione semantica e vettori in una singola operazione di query. - I campi vettoriali devono essere
type: Collection(Edm.Single)
con proprietàdimensions
evectorSearchProfile
. - La sezione
vectorSearch
è una matrice di configurazioni e profili approssimativi dell'algoritmo adiacente più vicino. Gli algoritmi supportati includono piccoli mondi navigabili gerarchici e vicini più prossimi k esaustivi. Per altre informazioni, vedere Assegnazione dei punteggi per pertinenza nella ricerca vettoriale. - [Facoltativo]: la configurazione
semantic
abilita il reranking dei risultati della ricerca. È possibile eseguire il reranking dei risultati nelle query di tiposemantic
per i campi stringa specificati nella configurazione. Per altre informazioni, vedere Panoramica della classificazione semantica.
- La raccolta
Carica documenti
La creazione e il caricamento dell'indice sono passaggi separati. In Ricerca di intelligenza artificiale di Azure l'indice contiene tutti i dati e le query ricercabili eseguiti nel servizio di ricerca. Per le chiamate REST, i dati vengono forniti come documenti JSON. Usare l'API REST Documents- Index per questa attività.
L'URI viene esteso per includere la raccolta docs
e l'operazione index
.
Importante
L'esempio seguente non è eseguibile. Per la leggibilità, sono stati esclusi i valori vettoriali perché ognuno contiene 1.536 incorporamenti, che è troppo lungo per questo articolo. Per provare questo passaggio, copiare il codice eseguibile dall'esempio in GitHub.
### Upload documents
POST {{baseUrl}}/indexes/hotels-quickstart-vectors/docs/index?api-version=2023-11-01 HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"value": [
{
"@search.action": "mergeOrUpload",
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The hotel is ideally located on the main commercial artery of the city
in the heart of New York.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"pool",
"air conditioning",
"concierge"
],
},
{
"@search.action": "mergeOrUpload",
"HotelId": "2",
"HotelName": "Old Century Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The hotel is situated in a nineteenth century plaza, which has been
expanded and renovated to the highest architectural standards to create a modern,
functional and first-class hotel in which art and unique historical elements
coexist with the most modern comforts.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"pool",
"air conditioning",
"free wifi",
"concierge"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "3",
"HotelName": "Gastronomic Landscape Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"The Hotel stands out for its gastronomic excellence under the management of
William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Resort and Spa",
"Tags": [
"air conditioning",
"bar",
"continental breakfast"
]
}
{
"@search.action": "mergeOrUpload",
"HotelId": "4",
"HotelName": "Sublime Palace Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Sublime Palace Hotel is located in the heart of the historic center of
Sublime in an extremely vibrant and lively area within short walking distance to
the sites and landmarks of the city and is surrounded by the extraordinary beauty
of churches, buildings, shops and monuments.
Sublime Palace is part of a lovingly restored 1800 palace.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"concierge",
"view",
"24-hour front desk service"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "13",
"HotelName": "Luxury Lion Resort",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Unmatched Luxury. Visit our downtown hotel to indulge in luxury
accommodations. Moments from the stadium, we feature the best in comfort",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Resort and Spa",
"Tags": [
"view",
"free wifi",
"pool"
]
},
{
"@search.action": "mergeOrUpload",
"HotelId": "48",
"HotelName": "Nordick's Valley Motel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Only 90 miles (about 2 hours) from the nation's capital and nearby
most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring
the caverns? It's all nearby and we have specially priced packages to help make
our B&B your home base for fun while visiting the valley.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Boutique",
"Tags": [
"continental breakfast",
"air conditioning",
"free wifi"
],
},
{
"@search.action": "mergeOrUpload",
"HotelId": "49",
"HotelName": "Swirling Currents Hotel",
"HotelNameVector": [VECTOR ARRAY OMITTED],
"Description":
"Spacious rooms, glamorous suites and residences, rooftop pool, walking
access to shopping, dining, entertainment and the city center.",
"DescriptionVector": [VECTOR ARRAY OMITTED],
"Category": "Luxury",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
}
]
}
Punti chiave:
- I documenti nel payload sono costituiti da campi definiti nello schema dell'indice.
- I campi vettoriali contengono valori a virgola mobile. L'attributo dimensions ha un minimo di 2 e un massimo di 3.072 valori a virgola mobile ciascuno. Questo argomento di avvio rapido imposta l'attributo dimensions su 1.536 perché è la dimensione degli incorporamenti generati dal modello text-embedding-ada-002 di Azure OpenAI.
Esegui query
Ora che i documenti vengono caricati, è possibile eseguire query vettoriali su di esse usando Documenti - Post di ricerca (REST).
Esistono diverse query per illustrare vari modelli:
- Ricerca a vettore singolo
- Ricerca a vettore singolo con filtro
- Ricerca ibrida
- Ricerca semantica ibrida con filtro
Le query vettoriali in questa sezione si basano su due stringhe:
- Stringa di ricerca:
historic hotel walk to restaurants and shopping
- Stringa di query vettoriale (vettorializzata in una rappresentazione matematica):
classic lodging near running trails, eateries, retail
La stringa di query vettoriale è semanticamente simile alla stringa di ricerca, ma include termini che non esistono nell'indice di ricerca. Se si esegue una ricerca di parole chiave per classic lodging near running trails, eateries, retail
, i risultati sono zero. Questo esempio viene usato per mostrare come ottenere risultati pertinenti anche se non sono presenti termini corrispondenti.
Importante
Gli esempi seguenti non sono codice eseguibile. Per la leggibilità, sono stati esclusi i valori vettoriali perché ogni matrice contiene 1.536 incorporamenti, troppo lunghi per questo articolo. Per provare queste query, copiare il codice eseguibile dall'esempio in GitHub.
Ricerca a vettore singolo
Incollare una richiesta POST per eseguire una query sull'indice di ricerca. Successivamente, selezionare Invia richiesta. L'URI viene esteso per includere l'operatore
/docs/search
.### Run a query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json Authorization: Bearer {{token}} { "count": true, "select": "HotelId, HotelName, Description, Category", "vectorQueries": [ { "vector"": [0.01944167, 0.0040178085 . . . TRIMMED FOR BREVITY 010858015, -0.017496133], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Questa query vettoriale viene abbreviata per motivi di brevità. Il
vectorQueries.vector
contiene il testo vettorializzato dell'input della query,fields
determina quali campi vettoriali vengono ricercati ek
specifica il numero di vicini più prossimi da restituire.La stringa di query vettoriale è
classic lodging near running trails, eateries, retail
, che viene vettorializzata in 1.536 incorporamenti per questa query.Rivedere la risposta. La risposta per l'equivalente vettore di
classic lodging near running trails, eateries, retail
include sette risultati. Ogni risultato fornisce un punteggio di ricerca e i campi elencati inselect
. In una ricerca di somiglianza, la risposta include sempre risultatik
ordinati in base al punteggio di somiglianza del valore.{ "@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)", "@odata.count": 7, "value": [ { "@search.score": 0.857736, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley." }, { "@search.score": 0.8399129, "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center." }, { "@search.score": 0.8383954, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" }, { "@search.score": 0.8254346, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.82380056, "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York." }, { "@search.score": 0.81514084, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts." }, { "@search.score": 0.8133763, "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services." } ] }
Ricerca a vettore singolo con filtro
È possibile aggiungere filtri, ma i filtri vengono applicati al contenuto non di filtro nell'indice. In questo esempio, il filtro si applica al campo Tags
per filtrare tutti gli hotel che non forniscono il Wi-Fi gratuito.
Incollare una richiesta POST per eseguire una query sull'indice di ricerca.
### Run a vector query with a filter POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json Authorization: Bearer {{token}} { "count": true, "select": "HotelId, HotelName, Category, Tags, Description", "filter": "Tags/any(tag: tag eq 'free wifi')", "vectorFilterMode": "postFilter", "vectorQueries": [ { "vector": [ VECTOR OMITTED ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true }, ] }
Rivedere la risposta. La query è la stessa dell'esempio precedente, ma include un filtro di esclusione post-elaborazione e restituisce solo i tre hotel che dispongono di Wi-Fi gratuito.
{ "@odata.count": 3, "value": [ { "@search.score": 0.857736, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Tags": [ "continental breakfast", "air conditioning", "free wifi" ] }, { "@search.score": 0.8383954, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort", "Tags": [ "view", "free wifi", "pool" ] }, { "@search.score": 0.81514084, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Tags": [ "pool", "free wifi", "concierge" ] } ] }
Ricerca ibrida
La ricerca ibrida è costituita da query con parole chiave e query vettoriali in una singola richiesta di ricerca. Questo esempio esegue simultaneamente la query vettoriale e la ricerca full-text:
- Stringa di ricerca:
historic hotel walk to restaurants and shopping
- Stringa di query vettoriale (vettorializzata in una rappresentazione matematica):
classic lodging near running trails, eateries, retail
Incollare una richiesta POST per eseguire una query sull'indice di ricerca. Successivamente, selezionare Invia richiesta.
### Run a hybrid query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json Authorization: Bearer {{token}} { "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelName, Description", "top": 7, "vectorQueries": [ { "vector": [ VECTOR OMITTED], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Poiché si tratta di una query ibrida, i risultati vengono classificati in base al valore RRF (Reciprocal Rank Fusion). RRF valuta i punteggi di ricerca di più risultati di ricerca, accetta l'inverso e quindi unisce e ordina i risultati combinati. Viene restituito il numero
top
di risultati.Rivedere la risposta.
{ "@odata.count": 7, "value": [ { "@search.score": 0.03279569745063782, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" }, { "@search.score": 0.03226646035909653, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.03226646035909653, "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center." }, { "@search.score": 0.03205128386616707, "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley." }, { "@search.score": 0.03128054738044739, "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services." }, { "@search.score": 0.03100961446762085, "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts." }, { "@search.score": 0.03077651560306549, "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York." } ] }
Poiché RRF unisce i risultati, consente di esaminare gli input. I risultati seguenti provengono solo dalla query full-text. I primi due risultati sono Sublime Palace Hotel e History Lion Resort. Il Sublime Palace Hotel ha un punteggio di pertinenza BM25 più forte.
{ "@search.score": 2.2626662, "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace." }, { "@search.score": 0.86421645, "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort" },
Nella query di solo vettore, che usa HNSW per trovare corrispondenze, sublime Palace Hotel scende alla quarta posizione. Historic Lion, secondo nella ricerca full-text e terzo nella ricerca vettoriale, non riscontra lo stesso intervallo di fluttuazione, quindi appare come una corrispondenza principale in un set di risultati omogeneizzato.
"value": [ { "@search.score": 0.857736, "HotelId": "48", "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Category": "Boutique" }, { "@search.score": 0.8399129, "HotelId": "49", "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.", "Category": "Luxury" }, { "@search.score": 0.8383954, "HotelId": "13", "HotelName": "Luxury Lion Resort", "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort", "Category": "Resort and Spa" }, { "@search.score": 0.8254346, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace.", "Category": "Boutique" }, { "@search.score": 0.82380056, "HotelId": "1", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.", "Category": "Boutique" }, { "@search.score": 0.81514084, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Category": "Boutique" }, { "@search.score": 0.8133763, "HotelId": "3", "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.", "Category": "Resort and Spa" } ]
Ricerca semantica ibrida con un filtro
Ecco l'ultima query della raccolta. Questa query ibrida con classificazione semantica viene filtrata per visualizzare solo gli hotel entro un raggio di 500 chilometri di Washington D.C. È possibile impostare vectorFilterMode
su Null, che equivale al valore predefinito (preFilter
per gli indici più recenti e postFilter
per quelli meno recenti).
Incollare una richiesta POST per eseguire una query sull'indice di ricerca. Successivamente, selezionare Invia richiesta.
### Run a hybrid query POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01 HTTP/1.1 Content-Type: application/json Authorization: Bearer {{token}} { "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelId, HotelName, Category, Description,Address/City, Address/StateProvince", "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 500", "vectorFilterMode": null, "facets": [ "Address/StateProvince"], "top": 7, "queryType": "semantic", "answers": "extractive|count-3", "captions": "extractive|highlight-true", "semanticConfiguration": "my-semantic-config", "vectorQueries": [ { "vector": [ VECTOR OMITTED ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Rivedere la risposta. La risposta è costituita da tre hotel, filtrati in base alla posizione e facet in base a
StateProvince
, e classificati in modo semantico per alzare di livello i risultati più vicini alla query della stringa di ricerca (historic hotel walk to restaurants and shopping
).L'Hotel Swirling Currents ora si sposta nella parte superiore. Senza classifica semantica, Il Motel della Valle di Nordick è il numero uno. Con la classificazione semantica, i modelli di comprensione della macchina riconoscono che
historic
si applica a "hotel, a pochi passi da ristoranti e negozi".{ "@odata.count": 3, "@search.facets": { "Address/StateProvince": [ { "count": 1, "value": "NY" }, { "count": 1, "value": "VA" } ] }, "@search.answers": [], "value": [ { "@search.score": 0.03306011110544205, "@search.rerankerScore": 2.5094974040985107, "HotelId": "49", "HotelName": "Swirling Currents Hotel", "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.", "Category": "Luxury", "Address": { "City": "Arlington", "StateProvince": "VA" } }, { "@search.score": 0.03306011110544205, "@search.rerankerScore": 2.0370211601257324, "HotelId": "48", "HotelName": "Nordick's Valley Motel", "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.", "Category": "Boutique", "Address": { "City": "Washington D.C.", "StateProvince": null } }, { "@search.score": 0.032258063554763794, "@search.rerankerScore": 1.6706111431121826, "HotelId": "1", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.", "Category": "Boutique", "Address": { "City": "New York", "StateProvince": "NY" } } ] }
Punti chiave:
- La ricerca vettoriale viene specificata tramite la proprietà
vectors.value
. La ricerca di parole chiave viene specificata tramite la proprietàsearch
. - In una ricerca ibrida è possibile integrare la ricerca vettoriale con la ricerca full-text sulle parole chiave. I filtri, il controllo ortografico e la classificazione semantica si applicano solo ai contenuti testuali e non ai vettori. In questa query finale non esiste un
answer
semantico perché il sistema non ha prodotto una query sufficientemente forte. - I risultati effettivi includono più dettagli, tra cui didascalie semantiche ed evidenziazioni. I risultati sono stati modificati per la leggibilità. Per ottenere la struttura completa della risposta, eseguire la richiesta nel client REST.
- La ricerca vettoriale viene specificata tramite la proprietà
Eseguire la pulizia
Quando si lavora nella propria sottoscrizione, al termine di un progetto è buona norma determinare se le risorse create sono ancora necessarie. Le risorse che rimangono in esecuzione hanno un costo. È possibile eliminare risorse singole oppure gruppi di risorse per eliminare l'intero set di risorse.
Per trovare e gestire le risorse nel portale, usare il link Tutte le risorse o Gruppi di risorse nel riquadro a sinistra.
È anche possibile provare questo comando DELETE
:
### Delete an index
DELETE {{baseUrl}}/indexes/hotels-vector-quickstart?api-version=2023-11-01 HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
Passaggi successivi
Come passaggio successivo, è consigliabile esaminare il codice demo per Python, C# o JavaScript.