Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search-Clientbibliothek für .NET, um semantic ranking zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Wollen Sie gleich loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Ein Azure KI-Suchdienst mit aktiviertem semantischem Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievablebezeichnet sind. In diesem Schnellstart wird davon ausgegangen, dass der Hotels-Beispielindex existiert..NET 9 oder höher.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In diesem Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
Um den empfohlenen rollenbasierten Zugriff zu konfigurieren:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, wird in diesem Schnellstart ein vorhandener Index vorausgesetzt, der bereits Daten enthält, sodass Sie die Rolle "Suchindex-Datenmitwirkender" nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Search-Dienst verfügt über einen endpoint, der eine eindeutige URL ist, die Netzwerkzugriff auf den Dienst identifiziert und bereitstellt. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die als searchable und retrievable.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON-Code in den Abfrage-Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel entspricht
walkingwalk, undliveundmusicentsprechen unabhängig voneinander, anstatt als Ausdruck."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-dotnet-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-dotnet-samples/quickstart-semantic-ranking code .Ersetzen Sie in
BuildIndex/Program.csden Platzhalterwert fürendpointdurch die URL, die Sie im Get-Endpunkt abgerufen haben.Wiederholen Sie den vorherigen Schritt für
QueryIndex/Program.cs.Melden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az login
Ausführen des Codes
Führen Sie das erste Projekt aus, um den Index mit einer semantischen Konfiguration zu aktualisieren.
dotnet run --project BuildIndexFühren Sie das zweite Projekt aus, um den Index abzufragen. Drücken Sie die EINGABETASTE zwischen Abfragen, um den Verlauf von einfacher Abfrage zu semantischer Abfrage mit Beschriftungen und Antworten anzuzeigen.
dotnet run --project QueryIndex
Output
Das erste Projekt aktualisiert den Hotel-Beispielindex mit einer semantischen Konfiguration. Die Ausgabe enthält eine Bestätigung der semantischen Konfiguration.
Here's a list of all indexes on the search service. You should see hotels-sample:
hotels-sample
Added new semantic configuration 'semantic-config' to the index definition.
Index updated successfully.
Here is the revised index definition:
{
"Name": "hotels-sample",
... // Trimmed for brevity
"SemanticSearch": {
"DefaultConfigurationName": "semantic-config",
"Configurations": [
{
"Name": "hotels-sample-semantic-configuration",
... // Trimmed for brevity
},
{
"Name": "semantic-config",
"PrioritizedFields": {
"TitleField": {
"FieldName": "HotelName"
},
"ContentFields": [
{
"FieldName": "Description"
}
],
"KeywordsFields": [
{
"FieldName": "Tags"
}
]
},
"RankingOrder": {}
}
]
}
}
Das zweite Projekt führt vier Abfragen aus. Die Ausgabe enthält die Suchergebnisse mit Relevanzbewertungen, Beschriftungen und Antworten.
Query 1: Simple query using the search string 'walking distance to live music'.
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.004435
----------------------------------------
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 2: Semantic query (no captions, no answers) for 'walking distance to live music'.
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
@search.rerankerScore: 2.613231658935547
----------------------------------------
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
@search.score: 5.004435
@search.rerankerScore: 2.271434783935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 3: Semantic query with captions.
Caption: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
@search.score: 4.555706
@search.rerankerScore: 2.613231658935547
----------------------------------------
... // Trimmed for brevity
Press Enter to continue to the next query...
Query 4: Semantic query with a verbatim answer from the Description field for 'what's a good hotel for people who like to read'.
Extractive Answers:
Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
----------------------------------------
... // Trimmed for brevity
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Beide Projekte verwenden dasselbe Konfigurationsmuster. Die Program.cs Dateien definieren den Such-Endpunkt und verwenden DefaultAzureCredential für die schlüssellose Authentifizierung.
var endpoint = new Uri("PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE");
var credential = new DefaultAzureCredential();
var indexClient = new SearchIndexClient(endpoint, credential);
Wichtige Erkenntnisse:
-
DefaultAzureCredentialstellt die schlüssellose Authentifizierung mithilfe von Microsoft Entra ID bereit. Sie verknüpft mehrere Anmeldeinformationstypen, einschließlich der Azure-CLI-Anmeldeinformationen vonaz login. -
SearchIndexClientverwaltet Vorgänge auf Indexebene, z. B. das Aktualisieren des Indexschemas. -
SearchClientbehandelt Vorgänge auf Dokumentebene, z. B. Abfragen des Indexes.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Der folgende Code fügt BuildIndex/Program.cs dem vorhandenen Index eine semantische Konfiguration hinzu. Dieser Vorgang löscht keine Suchdokumente, und Ihr Index bleibt funktionsfähig, nachdem die Konfiguration hinzugefügt wurde.
static void AddSemanticConfiguration(
SearchIndex index,
string semanticConfigName)
{
if (index.SemanticSearch == null)
{
index.SemanticSearch = new SemanticSearch();
}
var configs = index.SemanticSearch.Configurations;
if (!configs.Any(c => c.Name == semanticConfigName))
{
var prioritizedFields =
new SemanticPrioritizedFields
{
TitleField = new SemanticField("HotelName"),
ContentFields =
{
new SemanticField("Description")
},
KeywordsFields =
{
new SemanticField("Tags")
}
};
configs.Add(
new SemanticConfiguration(
semanticConfigName,
prioritizedFields
)
);
}
index.SemanticSearch.DefaultConfigurationName =
semanticConfigName;
}
Wichtige Erkenntnisse:
- Eine semantische Konfiguration gibt die Felder an, die für die semantische Rangfolge verwendet werden.
- Semantische Konfigurationen können vorhandenen Indizes hinzugefügt werden, ohne neu zu erstellen.
-
TitleFieldlegt das Feld fest, das den Dokumenttitel darstellt. -
ContentFieldslegt die Felder fest, die den Hauptinhalt enthalten. -
KeywordsFieldslegt die Felder fest, die Schlüsselwörter oder Tags enthalten.
Abfragen des Indexes
Das QueryIndex Projekt führt vier Abfragen der Reihe nach aus, beginnend mit einer einfachen Schlüsselwortsuche bis hin zum semantischen Ranking mit Beschriftungen und Antworten.
Einfache Abfrage
Die erste Abfrage ist eine einfache Stichwortsuche, die keine semantische Rangfolge verwendet. Diese Abfrage dient als Basis für den Vergleich von Ergebnissen mit und ohne semantischen Umrankung.
await RunQuery(client, searchText, new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Simple,
IncludeTotalCount = true,
Select = { "HotelId", "HotelName", "Description" }
});
Wichtige Erkenntnisse:
-
SearchQueryType.Simpleverwendet den standardmäßigen BM25-Bewertungsalgorithmus. - Die Ergebnisse werden nur nach Schlüsselwortrelevanz (
@search.score) bewertet.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Die nächste Abfrage fügt die semantische Rangfolge ohne Beschriftungen oder Antworten hinzu. Der folgende Code zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge.
var semanticOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config"
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
await RunQuery(client, searchText, semanticOptions);
Wichtige Erkenntnisse:
-
SearchQueryType.Semanticaktiviert die semantische Rangfolge für die Abfrage. -
SemanticConfigurationNameGibt an, welche semantische Konfiguration verwendet werden soll. -
@search.rerankerScoregibt die semantische Relevanz an (höher ist besser). - Die ersten Ergebnisse aus der Ausdrucksabfrage werden mithilfe von semantischen Bewertungsmodellen neu bewertet. Für dieses Dataset und diese Abfrage sind die Auswirkungen der semantischen Rangfolge in den ergebnissen mit niedrigerer Rangfolge stärker ausgeprägt.
Semantische Abfrage mit Beschriftungen
Der folgende Code fügt Beschriftungen hinzu, die helfen, die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei Trefferhervorhebungen auf die wichtigen Begriffe und Ausdrücke angewendet werden.
var captionsOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config",
QueryCaption =
new QueryCaption(QueryCaptionType.Extractive)
{
HighlightEnabled = true
}
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
captionsOptions.HighlightFields.Add("Description");
await RunQuery(
client, searchText, captionsOptions, showCaptions: true
);
Wichtige Erkenntnisse:
-
QueryCaptionaktiviert extraktive Beschriftungen aus den Inhaltsfeldern. - Beschriftungen heben die relevantesten Passagen hervor und fügen
<em>-Markierungen zu wichtigen Begriffen hinzu.
Semantische Abfrage mit Antworten
Die letzte Abfrage fügt semantische Antworten hinzu. Diese Abfrage verwendet eine andere Suchzeichenfolge (searchText2), da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Wenn Antworten für Ihr Szenario nicht hilfreich sind, lassen Sie QueryAnswer aus Ihrem Code. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
var answersOptions = new SearchOptions
{
Size = 5,
QueryType = SearchQueryType.Semantic,
SemanticSearch = new SemanticSearchOptions
{
SemanticConfigurationName = "semantic-config",
QueryAnswer =
new QueryAnswer(QueryAnswerType.Extractive)
},
IncludeTotalCount = true,
Select =
{
"HotelId", "HotelName", "Description"
}
};
await RunQuery(
client, searchText2, answersOptions, showAnswers: true
);
Wichtige Erkenntnisse:
-
QueryAnswerermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search-Clientbibliothek für Java, um semantic ranking zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Wollen Sie gleich loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Ein Azure KI-Suchdienst mit aktiviertem semantischem Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievablebezeichnet sind. In diesem Schnellstart wird davon ausgegangen, dass der Hotels-Beispielindex existiert.Java 21 (LTS) und Maven.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In diesem Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
Um den empfohlenen rollenbasierten Zugriff zu konfigurieren:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, wird in diesem Schnellstart ein vorhandener Index vorausgesetzt, der bereits Daten enthält, sodass Sie die Rolle "Suchindex-Datenmitwirkender" nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Search-Dienst verfügt über einen endpoint, der eine eindeutige URL ist, die Netzwerkzugriff auf den Dienst identifiziert und bereitstellt. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die als searchable und retrievable.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON-Code in den Abfrage-Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel entspricht
walkingwalk, undliveundmusicentsprechen unabhängig voneinander, anstatt als Ausdruck."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-java-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-java-samples/quickstart-semantic-ranking code .Ersetzen Sie in
src/main/resources/application.propertiesden Platzhalterwert fürazure.search.endpointdurch die URL, die Sie im Get-Endpunkt abgerufen haben.Kompilieren Sie das Projekt, um Abhängigkeiten zu beheben, einschließlich azure-search-documents.
mvn compileÜberprüfen Sie nach Abschluss des Builds, ob in der Ausgabe keine Fehler angezeigt werden.
Melden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az login
Ausführen des Codes
Rufen Sie die vorhandenen Indexeinstellungen ab.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.GetIndexSettings"Aktualisieren Sie den Index mit einer semantischen Konfiguration.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.UpdateIndexSettings"Führen Sie eine semantische Abfrage aus.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQuery"Führen Sie eine semantische Abfrage mit Beschriftungen aus.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticQueryWithCaptions"Führen Sie eine semantische Abfrage mit Antworten aus.
mvn compile exec:java "-Dexec.mainClass=com.azure.search.quickstart.SemanticAnswer"
Output
Die Ausgabe von GetIndexSettings.java umfasst den Namen des Indexes, dessen Felder und semantische Konfigurationen. Bevor Sie eine neue Konfiguration hinzufügen, weist der Index nur die Standardkonfiguration auf.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic search configurations: 1
Configuration name: hotels-sample-semantic-configuration
In der Ausgabe werden UpdateIndexSettings.java alle semantischen Konfigurationen im Index aufgelistet, einschließlich der vom Code hinzugefügten, gefolgt von einer Erfolgsmeldung.
// Trimmed for brevity
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Die Ausgabe von SemanticQuery.java gibt alle übereinstimmenden Dokumente zurück, die nach dem semantischen Bewertungs-Re-Ranker-Score sortiert sind.
Search result #1:
Re-ranker Score: 2.61
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.27
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Search result #3:
Re-ranker Score: 1.99
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
// Trimmed for brevity
Die Ausgabe von SemanticQueryWithCaptions.java fügt ein Captions-Element mit Treffermarkierung neben den Suchfeldern hinzu. Beschriftungen sind die relevantesten Passagen in einem Ergebnis. Wenn Ihr Index größeren Text enthält, helfen Beschriftungen beim Extrahieren der interessantesten Sätze.
Search result #1:
Re-ranker Score: 2.61
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.27
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Caption text: 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. The hotel also regularly hosts events like wine tastings, beer dinners, and live.
------------------------------------------------------------
// Trimmed for brevity
Die Ausgabe von SemanticAnswer.java enthält eine semantische Antwort, die von einem der Ergebnisse abgerufen wird, die am besten mit der Frage übereinstimmen, gefolgt von Suchergebnissen mit Bildunterschriften.
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.98
Search Results:
Search result #1:
Re-ranker Score: 2.12
Hotel: Stay-Kay City Hotel
Description: This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Caption: This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Search result #2:
Re-ranker Score: 2.07
Hotel: Double Sanctuary Resort
Description: 5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
Caption: <em>5 star Luxury Hotel </em>-<em> Biggest </em>Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.
// Trimmed for brevity
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Die SearchConfig.java Klasse lädt Eigenschaften aus application.properties und erstellt eine DefaultAzureCredential für die schlüssellose Authentifizierung.
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SearchConfig {
private static final Properties properties =
new Properties();
static {
try (InputStream input = SearchConfig.class
.getClassLoader()
.getResourceAsStream(
"application.properties")) {
properties.load(input);
} catch (IOException e) {
throw new RuntimeException(
"Failed to load application.properties",
e);
}
}
public static final String SEARCH_ENDPOINT =
properties.getProperty(
"azure.search.endpoint");
public static final String INDEX_NAME =
properties.getProperty(
"azure.search.index.name");
public static final String SEMANTIC_CONFIG_NAME =
properties.getProperty(
"semantic.configuration.name");
public static final DefaultAzureCredential
CREDENTIAL = new DefaultAzureCredentialBuilder()
.build();
}
Wichtige Erkenntnisse:
-
DefaultAzureCredentialstellt die schlüssellose Authentifizierung mithilfe von Microsoft Entra ID bereit. Es verbindet mehrere Anmeldedatentypen, einschließlich der Azure-CLI-Anmeldedaten vonaz login. - Eigenschaften werden aus der
application.propertiesDatei im Klassenpfad geladen. - Statische Felder (
SEARCH_ENDPOINT,INDEX_NAME,SEMANTIC_CONFIG_NAME,CREDENTIAL) werden für alle Klassen im project freigegeben.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Die UpdateIndexSettings.java Klasse fügt dem vorhandenen hotels-sample Index eine semantische Konfiguration hinzu. Dieser Vorgang löscht keine Suchdokumente, und Ihr Index bleibt funktionsfähig, nachdem die Konfiguration hinzugefügt wurde.
import com.azure.search.documents.indexes
.SearchIndexClientBuilder;
import com.azure.search.documents.indexes.models
.SearchIndex;
import com.azure.search.documents.indexes.models
.SemanticConfiguration;
import com.azure.search.documents.indexes.models
.SemanticField;
import com.azure.search.documents.indexes.models
.SemanticPrioritizedFields;
import com.azure.search.documents.indexes.models
.SemanticSearch;
import java.util.ArrayList;
import java.util.List;
var indexClient = new SearchIndexClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
SearchIndex existingIndex =
indexClient.getIndex(SearchConfig.INDEX_NAME);
var prioritizedFields =
new SemanticPrioritizedFields()
.setTitleField(
new SemanticField("HotelName"))
.setKeywordsFields(
List.of(new SemanticField("Tags")))
.setContentFields(
List.of(
new SemanticField("Description")));
var newSemanticConfiguration =
new SemanticConfiguration(
SearchConfig.SEMANTIC_CONFIG_NAME,
prioritizedFields);
SemanticSearch semanticSearch =
existingIndex.getSemanticSearch();
if (semanticSearch == null) {
semanticSearch = new SemanticSearch();
existingIndex.setSemanticSearch(semanticSearch);
}
List<SemanticConfiguration> configurations =
semanticSearch.getConfigurations();
if (configurations == null) {
configurations = new ArrayList<>();
semanticSearch.setConfigurations(configurations);
}
configurations.add(newSemanticConfiguration);
indexClient.createOrUpdateIndex(existingIndex);
Wichtige Erkenntnisse:
-
SemanticPrioritizedFieldsdefiniert, welche Felder der semantische Rangfolger auswertet.setTitleFieldlegt den Dokumenttitel fest,setContentFieldslegt den Hauptinhalt fest undsetKeywordsFieldslegt das Schlüsselwort oder die Tagfelder fest. -
SemanticConfigurationkoppelt einen Namen mit den priorisierten Feldern, die bestimmen, welche semantische Konfiguration zur Abfragezeit verwendet werden soll. -
createOrUpdateIndexverschiebt das aktualisierte Schema an die search service, ohne den Index neu zu erstellen oder Dokumente zu löschen.
Abfragen des Indexes
In den folgenden drei Klassen wird der Index in Reihenfolge abgefragt, wobei von einer einfachen semantischen Suche zu einer fortgeschrittenen semantischen Rangfolge mit Beschriftungen und Antworten fortgeschritten wird.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Die erste Abfrage fügt eine semantische Rangfolge ohne Beschriftungen oder Antworten hinzu. Die SemanticQuery.java Klasse zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge an.
import com.azure.search.documents
.SearchClientBuilder;
import com.azure.search.documents.SearchDocument;
import com.azure.search.documents.models.QueryType;
import com.azure.search.documents.models.SearchOptions;
import com.azure.search.documents.models.SearchResult;
import com.azure.search.documents.models
.SemanticSearchOptions;
import com.azure.search.documents.util
.SearchPagedIterable;
var searchClient = new SearchClientBuilder()
.endpoint(SearchConfig.SEARCH_ENDPOINT)
.indexName(SearchConfig.INDEX_NAME)
.credential(SearchConfig.CREDENTIAL)
.buildClient();
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME))
.setSelect("HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
var document = result.getDocument(
SearchDocument.class);
double rerankerScore = result
.getSemanticSearch().getRerankerScore();
System.out.printf("Re-ranker Score: %.2f%n",
rerankerScore);
System.out.printf("HotelName: %s%n",
document.get("HotelName"));
System.out.printf("Description: %s%n%n",
document.get("Description"));
}
Wichtige Erkenntnisse:
-
QueryType.SEMANTICaktiviert die semantische Rangfolge für die Abfrage. -
setSemanticConfigurationNameGibt an, welche semantische Konfiguration verwendet werden soll. -
SearchPagedIterablebietet eine Iterable über die neu geordneten Ergebnisse. JederSearchResultenthält einengetSemanticSearch()Accessor für die Rerankerbewertung.
Semantische Abfrage mit Beschriftungen
Die SemanticQueryWithCaptions.java-Klasse fügt Beschriftungen hinzu, um die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei Trefferhervorhebungen auf die wichtigen Begriffe und Ausdrücke angewendet werden.
import com.azure.search.documents.models
.QueryCaption;
import com.azure.search.documents.models
.QueryCaptionResult;
import com.azure.search.documents.models
.QueryCaptionType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE)
.setHighlightEnabled(true)))
.setSelect(
"HotelId", "HotelName", "Description");
SearchPagedIterable results = searchClient.search(
"walking distance to live music",
searchOptions, null);
for (SearchResult result : results) {
List<QueryCaptionResult> captions =
result.getSemanticSearch()
.getQueryCaptions();
if (captions != null && !captions.isEmpty()) {
QueryCaptionResult caption = captions.get(0);
if (caption.getHighlights() != null) {
System.out.printf(
"Caption: %s%n",
caption.getHighlights());
}
}
}
Wichtige Erkenntnisse:
-
QueryCaption(QueryCaptionType.EXTRACTIVE)aktiviert extraktive Beschriftungen aus den Inhaltsfeldern. -
setHighlightEnabled(true)Fügt<em>Tags zu wichtigen Begriffen in Beschriftungen hinzu. - Jeder
SearchResultstelltgetQueryCaptions()für den semantischen Suchaccessor bereit.
Semantische Abfrage mit Antworten
Die SemanticAnswer.java Klasse fügt semantische Antworten hinzu. Diese Klasse verwendet eine Frage als Suchtext, da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Lassen Sie setQueryAnswer aus Ihrem Code aus, wenn Antworten für Ihr Szenario nicht hilfreich sind. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
import com.azure.search.documents.models
.QueryAnswer;
import com.azure.search.documents.models
.QueryAnswerResult;
import com.azure.search.documents.models
.QueryAnswerType;
var searchOptions = new SearchOptions()
.setQueryType(QueryType.SEMANTIC)
.setSemanticSearchOptions(
new SemanticSearchOptions()
.setSemanticConfigurationName(
SearchConfig.SEMANTIC_CONFIG_NAME)
.setQueryCaption(
new QueryCaption(
QueryCaptionType.EXTRACTIVE))
.setQueryAnswer(
new QueryAnswer(
QueryAnswerType.EXTRACTIVE)))
.setSelect(
"HotelName", "Description", "Category");
SearchPagedIterable results = searchClient.search(
"What's a good hotel for people who like to read",
searchOptions, null);
List<QueryAnswerResult> semanticAnswers =
results.getSemanticResults().getQueryAnswers();
for (QueryAnswerResult answer :
semanticAnswers != null ? semanticAnswers
: List.<QueryAnswerResult>of()) {
if (answer.getHighlights() != null) {
System.out.printf(
"Semantic Answer: %s%n",
answer.getHighlights());
} else {
System.out.printf(
"Semantic Answer: %s%n",
answer.getText());
}
System.out.printf(
"Semantic Answer Score: %.2f%n",
answer.getScore());
}
Wichtige Erkenntnisse:
-
QueryAnswer(QueryAnswerType.EXTRACTIVE)ermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
-
results.getSemanticResults().getQueryAnswers()ruft die Antwortobjekte getrennt von den Suchergebnissen ab.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search-Clientbibliothek für JavaScript, um semantic ranking zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Möchten Sie sofort loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Ein Azure AI Suchdienst mit aktiviertem semantischen Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievable. Bei diesem Quickstart wird davon ausgegangen, dass der Hotels-Beispielindex vorhanden ist.Node.js 20 LTS oder höher.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In diesem Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
So konfigurieren Sie den empfohlenen rollenbasierten Zugriff:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, setzt dieser Schnellstart einen vorhandenen Index voraus, der bereits Daten enthält, sodass Sie die Rolle Search Index Data Contributor nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Suchdienst verfügt über einen Endpunkt, der eine eindeutige URL ist, die Netzwerkzugriff für den Dienst identifiziert und bereitstellt. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die mit searchable und retrievable bezeichnet sind.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON-Code in den Query Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel
walkingentsprichtwalk, undliveundmusicstimmen unabhängig überein, anstatt als Ausdruck."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-javascript-samples/quickstart-semantic-ranking-js code .Ersetzen Sie in
sample.envden Platzhalterwert fürAZURE_SEARCH_ENDPOINTdurch die URL, die Sie im Get-Endpunkt abgerufen haben.Benennen Sie
sample.envin.envum.mv sample.env .envInstallieren Sie die Abhängigkeiten.
npm installNach Abschluss der Installation sollte im verzeichnis project ein ordner "
node_modules" angezeigt werden.Melden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az login
Ausführen des Codes
Rufen Sie die vorhandenen Indexeinstellungen ab.
node -r dotenv/config src/getIndexSettings.jsAktualisieren Sie den Index mit einer semantischen Konfiguration.
node -r dotenv/config src/updateIndexSettings.jsFühren Sie eine semantische Abfrage aus.
node -r dotenv/config src/semanticQuery.jsFühren Sie eine semantische Abfrage mit Beschriftungen aus.
node -r dotenv/config src/semanticQueryReturnCaptions.jsFühren Sie eine semantische Abfrage mit Antworten aus.
node -r dotenv/config src/semanticAnswer.js
Output
Das getIndexSettings.js Skript gibt den Namen des Indexes, dessen Felder und alle vorhandenen semantischen Konfigurationen zurück.
Getting semantic ranking index settings...
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
Field: Description_fr, Type: Edm.String, Searchable: true
Field: Category, Type: Edm.String, Searchable: true
Field: Tags, Type: Collection(Edm.String), Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Das updateIndexSettings.js Skript gibt alle semantischen Konfigurationen im Index zurück, einschließlich des hinzugefügten Codes, gefolgt von einer Erfolgsmeldung.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Das semanticQuery.js Skript gibt alle übereinstimmenden Dokumente zurück, die nach dem semantischen Rangfolgescore geordnet sind.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.271434783935547
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Search result #3:
Re-ranker Score: 1.9861756563186646
HotelId: 4
HotelName: Sublime Palace Hotel
Description: Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.
// Trimmed for brevity
Das semanticQueryReturnCaptions.js Skript gibt ein Beschriftungselement mit Treffermarkierung zusammen mit Suchfeldern zurück. Beschriftungen sind die relevantesten Passagen in einem Ergebnis. Wenn Ihr Index größeren Text enthält, helfen Beschriftungen beim Extrahieren der interessantesten Sätze.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and then head over to<em> Benaroya Hall </em>to catch the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.
Caption text: 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. The hotel also regularly hosts events like wine tastings, beer dinners, and live.
------------------------------------------------------------
// Trimmed for brevity
Das semanticAnswer.js Skript gibt eine semantische Antwort zurück, die von einem der Ergebnisse abgerufen wird, die am besten mit der Frage übereinstimmen, gefolgt von Suchergebnissen mit Beschriftungen.
Answers:
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
Caption: This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.
// Trimmed for brevity
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Die config.js Datei lädt Umgebungsvariablen und erstellt ein DefaultAzureCredential für die Authentifizierung.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
Wichtige Erkenntnisse:
-
DefaultAzureCredentialstellt die schlüssellose Authentifizierung mithilfe von Microsoft Entra ID bereit. Es verkettet mehrere Anmeldetypen, einschließlich der Azure CLI-Anmeldung vonaz login. - Umgebungsvariablen werden aus der
.envDatei mitdotenvgeladen.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Die updateIndexSettings.js Datei fügt dem vorhandenen hotels-sample Index eine semantische Konfiguration hinzu. Dieser Vorgang löscht keine Suchdokumente, und Ihr Index bleibt funktionsfähig, nachdem die Konfiguration hinzugefügt wurde.
import { SearchIndexClient }
from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields = {
titleField: { name: "HotelName" },
keywordsFields: [{ name: "Tags" }],
contentFields: [{ name: "Description" }]
};
const newSemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Wichtige Erkenntnisse:
- Eine semantische Konfiguration gibt die Felder an, die für die semantische Rangfolge verwendet werden.
titleFielddefiniert den Dokumenttitel,contentFieldsdefiniert den Hauptinhalt undkeywordsFieldsdefiniert das Schlüsselwort oder die Tagfelder. - Sie erstellen ein Konfigurationsobjekt und übertragen es an das Array des vorhandenen Indexes
semanticSearch.configurations. -
createOrUpdateIndexverschiebt das aktualisierte Schema an die search service, ohne den Index neu zu erstellen oder Dokumente zu löschen.
Abfragen des Indexes
Die Abfrageskripts führen drei Abfragen nacheinander aus, beginnend mit einer einfachen semantischen Suche und fortschreitend bis zu einer semantischen Rangfolge, die durch Beschriftungen und Antworten ergänzt wird.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Der folgende Code zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge.
import { SearchClient }
from "@azure/search-documents";
import {
credential, searchEndpoint,
indexName, semanticConfigurationName
} from "./config.js";
const searchClient = new SearchClient(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Wichtige Erkenntnisse:
-
queryType: "semantic"aktiviert die semantische Rangfolge für die Abfrage. -
semanticSearchOptions.configurationNameGibt an, welche semantische Konfiguration verwendet werden soll. - Das
rerankerScore-Ergebnis zeigt die semantische Relevanz an, höher ist besser.
Semantische Abfrage mit Beschriftungen
Der folgende Code fügt Beschriftungen hinzu, die helfen, die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei Trefferhervorhebungen auf die wichtigen Begriffe und Ausdrücke angewendet werden.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Wichtige Erkenntnisse:
-
captions.captionType: "extractive"aktiviert extraktive Beschriftungen aus den Inhaltsfeldern. - Beschriftungen bringen die relevantesten Passagen hervor und fügen "Tags" um wichtige Begriffe hinzu.
Semantische Abfrage mit Antworten
Die letzte Abfrage fügt semantische Antworten hinzu. Diese Abfrage verwendet eine Frage als Suchtext, da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Wenn Antworten für Ihr Szenario nicht hilfreich sind, lassen Sie answers aus Ihrem Code weg. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Wichtige Erkenntnisse:
-
answers.answerType: "extractive"ermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
-
results.answersruft die Antwortobjekte getrennt von den Suchergebnissen ab.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search-Clientbibliothek für Python, um semantic ranking zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Möchten Sie sofort loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Ein Azure KI-Suchdienst mit aktiviertem semantischem Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievablebezeichnet sind. In diesem Schnellstart wird davon ausgegangen, dass der Hotels-Beispielindex existiert.Python 3.10 oder höher.
Visual Studio Code mit der erweiterung Python.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In diesem Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
Um den empfohlenen rollenbasierten Zugriff zu konfigurieren:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, wird in diesem Schnellstart ein vorhandener Index vorausgesetzt, der bereits Daten enthält, sodass Sie die Rolle "Suchindex-Datenmitwirkender" nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Search-Dienst verfügt über einen endpoint, der eine eindeutige URL ist, die Netzwerkzugriff auf den Dienst identifiziert und bereitstellt. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die als searchable und retrievable.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON-Code in den Abfrage-Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel entspricht
walkingwalk, undliveundmusicentsprechen unabhängig voneinander, anstatt als Ausdruck."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-python-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-python-samples/Quickstart-Semantic-Ranking code .Ersetzen Sie in
sample.envden Platzhalterwert fürAZURE_SEARCH_ENDPOINTdurch die URL, die Sie im Get-Endpunkt abgerufen haben.Benennen Sie
sample.envin.envum.mv sample.env .envÖffnen Sie
semantic-ranking-quickstart.ipynb.Drücken Sie STRG+UMSCHALT+P, wählen Sie Notizbuch: Notizbuch-Kernel auswählen, und folgen Sie den Anweisungen, um eine virtuelle Umgebung zu erstellen. Wählen Sie requirements.txt für die Abhängigkeiten aus.
Nach Abschluss sollten Sie einen Ordner "
.venv" im Projektverzeichnis sehen.Melden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az login
Ausführen des Codes
Führen Sie die
Install packages and set variablesZellen aus, um die erforderlichen Pakete zu installieren und Umgebungsvariablen zu laden.Führen Sie die verbleibenden Zellen sequenziell aus, um eine semantische Konfiguration hinzuzufügen und den Index abzufragen.
Output
Die Ausgabe der Get the index definition Zelle ist der Name des Indexes, der zugehörigen Felder und aller vorhandenen semantischen Konfigurationen.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: True
Field: HotelName, Type: Edm.String, Searchable: True
Field: Description, Type: Edm.String, Searchable: True
Field: Description_fr, Type: Edm.String, Searchable: True
Field: Category, Type: Edm.String, Searchable: True
Field: Tags, Type: Collection(Edm.String), Searchable: True
// Trimmed for brevity
Semantic config: hotels-sample-semantic-configuration
Title field: HotelName
Die Ausgabe der Add a semantic configuration to the index Zelle listet alle semantischen Konfigurationen im Index auf, einschließlich des Codes, der hinzugefügt wurde, gefolgt von einer Erfolgsmeldung.
Semantic configurations:
----------------------------------------
Configuration: hotels-sample-semantic-configuration
Title field: HotelName
Keywords fields: Category
Content fields: Description
Configuration: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
✅ Semantic configuration successfully added!
Die Ausgabe der Run a term query-Zelle gibt alle passenden Dokumente zurück, die nach BM25-Score sortiert sind. Diese Basisplanabfrage verwendet keine semantische Rangfolge.
5.360838
4
Sublime Palace Hotel
Description: Sublime Cliff 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 Cliff is part of a lovingly restored
19th century resort, updated for every modern convenience.
4.691083
2
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. The hotel also regularly hosts events like wine
tastings, beer dinners, and live music.
// Trimmed for brevity
Die Ausgabe der Run a semantic query Zelle gibt alle übereinstimmenden Dokumente zurück, die nach dem semantischen Re-Ranker-Score sortiert sind.
2.613231658935547
24
Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
2.271434783935547
2
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. The hotel also regularly hosts events like wine
tastings, beer dinners, and live music.
// Trimmed for brevity
Die Return captions-Zelle fügt in der Ausgabe ein Beschriftungselement mit Treffermarkierung neben den Suchfeldern hinzu. Beschriftungen sind die relevantesten Passagen in einem Ergebnis. Wenn Ihr Index größeren Text enthält, helfen Beschriftungen beim Extrahieren der interessantesten Sätze.
2.613231658935547
24
Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Caption: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to<em> theaters, </em>art galleries,
restaurants and shops. Visit<em> Seattle Art Museum </em>by day, and
then head over to<em> Benaroya Hall </em>to catch the evening's
concert performance.
// Trimmed for brevity
Die Ausgabe der Return semantic answers Zelle enthält eine semantische Antwort, die aus einem der Ergebnisse abgerufen wird, die am besten mit der Frage übereinstimmen, gefolgt von Suchergebnissen mit Beschriftungen.
Semantic Answer: Nature is Home on the beach. Explore the shore by
day, and then come home to our shared living space to relax around a
stone fireplace, sip something warm, and explore the<em> library
</em>by night. Save up to 30 percent. Valid Now through the end of
the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Die Install packages and set variables Zelle lädt Umgebungsvariablen und richtet einen Authentifizierungsprozess ein.
from dotenv import load_dotenv
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
import os
load_dotenv(override=True)
search_endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
credential = DefaultAzureCredential()
index_name = os.getenv(
"AZURE_SEARCH_INDEX", "hotels-sample"
)
Wichtige Erkenntnisse:
-
DefaultAzureCredentialstellt die schlüssellose Authentifizierung mithilfe von Microsoft Entra ID bereit. Sie verknüpft mehrere Anmeldeinformationstypen, einschließlich der Azure-CLI-Anmeldeinformationen vonaz login. - Umgebungsvariablen werden von der
.envDatei mithilfepython-dotenvgeladen.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Die Add a semantic configuration to the index Zelle fügt dem vorhandenen hotels-sample Index eine semantische Konfiguration hinzu. Dieser Vorgang löscht keine Suchdokumente, und Ihr Index bleibt funktionsfähig, nachdem die Konfiguration hinzugefügt wurde.
from azure.search.documents.indexes.models import (
SemanticConfiguration,
SemanticField,
SemanticPrioritizedFields,
SemanticSearch
)
new_semantic_config = SemanticConfiguration(
name="semantic-config",
prioritized_fields=SemanticPrioritizedFields(
title_field=SemanticField(field_name="HotelName"),
keywords_fields=[
SemanticField(field_name="Tags")
],
content_fields=[
SemanticField(field_name="Description")
]
)
)
if existing_index.semantic_search is None:
existing_index.semantic_search = SemanticSearch(
configurations=[new_semantic_config]
)
else:
existing_index.semantic_search.configurations.append(
new_semantic_config
)
result = index_client.create_or_update_index(existing_index)
Wichtige Erkenntnisse:
- Eine semantische Konfiguration gibt die Felder an, die für die semantische Rangfolge verwendet werden.
title_fieldlegt den Dokumenttitel fest,content_fieldslegt den Hauptinhalt fest undkeywords_fieldslegt das Schlüsselwort oder die Tagfelder fest. - Sie erstellen die Konfiguration mit
SemanticConfigurationund dem zugehörigenSemanticPrioritizedFieldsModell, und fügen sie dann an den vorhandenen Index an. -
create_or_update_indexverschiebt das aktualisierte Schema an die search service, ohne den Index neu zu erstellen oder Dokumente zu löschen.
Abfragen des Indexes
Die Abfragezellen führen vier Abfragen nacheinander aus: eine grundlegende Schlüsselwortsuche gefolgt von drei semantischen Rangfolgevariationen mit zunehmender Funktionalität.
Term-Abfrage (Baseline)
Die Run a term query-Zelle führt eine Schlüsselwortsuche mithilfe des BM25-Scorings durch. Diese Basisplanabfrage verwendet keine semantische Rangfolge und dient als Vergleichspunkt.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
results = search_client.search(
query_type='simple',
search_text="walking distance to live music",
select='HotelId,HotelName,Description',
include_total_count=True
)
Wichtige Erkenntnisse:
-
query_type='simple'Gibt eine Schlüsselwortsuche mithilfe des BM25-Scorings an. - Die
@search.scorein den Ergebnissen angezeigte Bewertung steht für den BM25-Relevanzwert.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Die Run a semantic query Zelle zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge.
from azure.search.documents import SearchClient
search_client = SearchClient(
endpoint=search_endpoint,
index_name=index_name,
credential=credential
)
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="walking distance to live music",
select='HotelId,HotelName,Description',
query_caption='extractive'
)
Wichtige Erkenntnisse:
-
query_type='semantic'aktiviert die semantische Rangfolge für die Abfrage. -
semantic_configuration_nameGibt an, welche semantische Konfiguration verwendet werden soll. - Die
@search.reranker_scoreergebnisse deuten auf die semantische Relevanz hin (höher ist besser).
Semantische Abfrage mit Beschriftungen
Die Return captions Zelle fügt Beschriftungen hinzu, um die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei die Trefferheraushebung auf die wichtigen Begriffe und Ausdrücke angewendet wird.
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="walking distance to live music",
select='HotelName,HotelId,Description',
query_caption='extractive'
)
for result in results:
captions = result["@search.captions"]
if captions:
caption = captions[0]
if caption.highlights:
print(f"Caption: {caption.highlights}\n")
Wichtige Erkenntnisse:
-
query_caption='extractive'aktiviert extraktive Beschriftungen aus den Inhaltsfeldern. - Beschriftungen heben die relevantesten Passagen hervor und fügen
<em>-Tags um wichtige Begriffe hinzu.
Semantische Abfrage mit Antworten
Die Return semantic answers Zelle fügt semantische Antworten hinzu. Diese Abfrage verwendet eine Frage als Suchtext, da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Wenn die Antworten für Ihr Szenario nicht hilfreich sind, lassen Sie query_answer aus dem Code weg. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
results = search_client.search(
query_type='semantic',
semantic_configuration_name='semantic-config',
search_text="what's a good hotel for people who "
"like to read",
select='HotelName,Description,Category',
query_caption='extractive',
query_answer="extractive",
)
semantic_answers = results.get_answers()
for answer in semantic_answers:
if answer.highlights:
print(f"Semantic Answer: {answer.highlights}")
else:
print(f"Semantic Answer: {answer.text}")
print(f"Semantic Answer Score: {answer.score}\n")
Wichtige Erkenntnisse:
-
query_answer="extractive"ermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
-
results.get_answers()ruft die Antwortobjekte getrennt von den Suchergebnissen ab.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search-Clientbibliothek für JavaScript (kompatibel mit TypeScript), um semantische Rangfolge zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Möchten Sie sofort loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Eine Azure KI-Suchdienst mit aktiviertem semantischen Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievableattribuiert sind. In diesem Schnellstart wird angenommen, dass der hotels-sample index vorhanden ist.Node.js 20 LTS oder höher, um den kompilierten Code auszuführen.
TypeScript zum Kompilieren von TypeScript in JavaScript.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In dieser Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
So konfigurieren Sie den empfohlenen rollenbasierten Zugriff:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, setzt dieser Schnellstart einen vorhandenen Index voraus, der bereits Daten enthält, sodass Sie die Rolle " Indexdatenmitwirkender" nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Suchdienst verfügt über einen Endpoint, welcher eine eindeutige URL ist, die Netzwerkzugriff bereitstellt und den Dienst im Netzwerk identifiziert. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die als searchable und retrievable.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON-Code in den Abfrage-Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel entspricht
walkingwalk, undliveundmusicentsprechen unabhängig voneinander, anstatt als Ausdruck."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-javascript-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-javascript-samples/quickstart-semantic-ranking-ts code .Ersetzen Sie in
sample.envden Platzhalterwert fürAZURE_SEARCH_ENDPOINTdurch die URL, die Sie im Get-Endpunkt abgerufen haben.Benennen Sie
sample.envin.envum.mv sample.env .envInstallieren Sie die Abhängigkeiten.
npm installNach Abschluss der Installation sollte im verzeichnis project ein ordner "
node_modules" angezeigt werden.Erstellen Sie die TypeScript-Dateien.
npm run buildMelden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az login
Ausführen des Codes
Rufen Sie die vorhandenen Indexeinstellungen ab.
node -r dotenv/config dist/getIndexSettings.jsAktualisieren Sie den Index mit einer semantischen Konfiguration.
node -r dotenv/config dist/updateIndexSettings.jsFühren Sie eine semantische Abfrage aus.
node -r dotenv/config dist/semanticQuery.jsFühren Sie eine semantische Abfrage mit Beschriftungen aus.
node -r dotenv/config dist/semanticQueryReturnCaptions.jsFühren Sie eine semantische Abfrage mit Antworten aus.
node -r dotenv/config dist/semanticAnswer.jsHinweis
Diese Befehle führen Dateien aus dem Ordner
distaus, da zuvor mitnpm run buildvon TypeScript in JavaScript transpiliert wurde.
Output
Das getIndexSettings.js Skript gibt den Indexnamen, die Feldanzahl, Felddetails mit Typ und durchsuchbaren Status sowie alle vorhandenen semantischen Konfigurationen zurück.
Index name: hotels-sample
Number of fields: 23
Field: HotelId, Type: Edm.String, Searchable: true
Field: HotelName, Type: Edm.String, Searchable: true
Field: Description, Type: Edm.String, Searchable: true
// Trimmed for brevity
Semantic ranking configurations: 1
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Das updateIndexSettings.js Skript gibt alle semantischen Konfigurationen zurück, einschließlich des von Ihnen hinzugefügten.
Semantic configurations:
----------------------------------------
Configuration name: hotels-sample-semantic-configuration
Title field: undefined
Keywords fields:
Content fields: AzureSearch_DocumentKey
----------------------------------------
Configuration name: semantic-config
Title field: HotelName
Keywords fields: Tags
Content fields: Description
----------------------------------------
Semantic configuration updated successfully.
Das semanticQuery.js Skript gibt Ergebnisse zurück, die nach dem Reranker-Score sortiert sind.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelId: 24
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Search result #2:
Re-ranker Score: 2.271434783935547
HotelId: 2
HotelName: Old Century Hotel
Description: The hotel is situated in a nineteenth century plaza...
// Trimmed for brevity
Das semanticQueryReturnCaptions.js Skript gibt extrahierende Beschriftungen mit Treffermarkierung zurück. Beschriftungen sind die relevantesten Passagen in einem Ergebnis.
Search result #1:
Re-ranker Score: 2.613231658935547
HotelName: Uptown Chic Hotel
Description: Chic hotel near the city. High-rise hotel in downtown,
within walking distance to theaters, art galleries, restaurants and
shops. Visit Seattle Art Museum by day, and then head over to
Benaroya Hall to catch the evening's concert performance.
Caption with highlights: Chic hotel near the city. High-rise hotel
in downtown, within walking distance to<em> theaters, </em>art
galleries, restaurants and shops. Visit<em> Seattle Art Museum
</em>by day, and then head over to<em> Benaroya Hall </em>to catch
the evening's concert performance.
------------------------------------------------------------
Search result #2:
Re-ranker Score: 2.271434783935547
HotelName: Old Century Hotel
// Trimmed for brevity
Das semanticAnswer.js Skript gibt eine semantische Antwort (Verbatim-Inhalt) aus dem Ergebnis zurück, das am besten mit der Frage übereinstimmt.
Semantic answer result #1:
Semantic Answer: Nature is Home on the beach. Explore the shore by
day, and then come home to our shared living space to relax around
a stone fireplace, sip something warm, and explore the<em> library
</em>by night. Save up to 30 percent. Valid Now through the end of
the year. Restrictions and blackouts may apply.
Semantic Answer Score: 0.9829999804496765
Search Results:
Search result #1:
2.124817371368408
Stay-Kay City Hotel
This classic hotel is fully-refurbished and ideally located on the
main commercial artery of the city in the heart of New York...
Caption: This classic hotel is<em> fully-refurbished </em>and
ideally located on the main commercial artery of the city...
// Trimmed for brevity
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Die config.ts Datei lädt Umgebungsvariablen, erstellt eine DefaultAzureCredential Authentifizierung und definiert eine HotelDocument Schnittstelle für die Typsicherheit.
import { DefaultAzureCredential }
from "@azure/identity";
export const searchEndpoint =
process.env.AZURE_SEARCH_ENDPOINT
|| "PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE";
export const indexName =
process.env.AZURE_SEARCH_INDEX_NAME
|| "hotels-sample";
export const semanticConfigurationName =
process.env.SEMANTIC_CONFIGURATION_NAME
|| "semantic-config";
export const credential = new DefaultAzureCredential();
export interface HotelDocument {
HotelId: string;
HotelName: string;
Description: string;
Category: string;
Tags: string[];
}
Wichtige Erkenntnisse:
-
DefaultAzureCredentialstellt die schlüssellose Authentifizierung mithilfe von Microsoft Entra ID bereit. Sie verknüpft mehrere Anmeldeinformationstypen, einschließlich der Azure-CLI-Anmeldeinformationen vonaz login. - Die
HotelDocumentSchnittstelle bietet eine Kompilierungszeit-Typüberprüfung für Suchergebnisse, um einen typsicheren Zugriff auf Dokumentfelder zu gewährleisten. - Umgebungsvariablen werden von der
.envDatei mithilfedotenvgeladen.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Die updateIndexSettings.ts Datei fügt dem vorhandenen hotels-sample Index eine semantische Konfiguration hinzu. Dieser Vorgang löscht keine Suchdokumente, und Ihr Index bleibt funktionsfähig, nachdem die Konfiguration hinzugefügt wurde. TypeScript-Typanmerkungen stellen sicher, dass die Konfiguration mit dem erwarteten Schema übereinstimmt.
import {
SearchIndexClient,
SemanticConfiguration,
SemanticPrioritizedFields,
SemanticField
} from "@azure/search-documents";
import {
searchEndpoint, indexName,
credential, semanticConfigurationName
} from "./config.js";
const indexClient = new SearchIndexClient(
searchEndpoint, credential
);
const existingIndex =
await indexClient.getIndex(indexName);
const fields: SemanticPrioritizedFields = {
titleField: { name: "HotelName" },
keywordsFields: [
{ name: "Tags" }
] as SemanticField[],
contentFields: [
{ name: "Description" }
] as SemanticField[]
};
const newSemanticConfiguration:
SemanticConfiguration = {
name: semanticConfigurationName,
prioritizedFields: fields
};
if (existingIndex.semanticSearch
&& existingIndex.semanticSearch.configurations) {
existingIndex.semanticSearch.configurations
.push(newSemanticConfiguration);
} else {
existingIndex.semanticSearch = {
configurations: [newSemanticConfiguration]
};
}
await indexClient.createOrUpdateIndex(existingIndex);
Wichtige Erkenntnisse:
- TypeScript-Typen wie
SemanticPrioritizedFields,SemanticConfigurationundSemanticFieldstellen eine Kompilierungszeitüberprüfung für die Konfigurationsstruktur bereit. -
titleFieldlegt den Dokumenttitel fest,contentFieldslegt den Hauptinhalt fest undkeywordsFieldslegt das Schlüsselwort oder die Tagfelder fest. -
createOrUpdateIndexverschiebt das aktualisierte Schema an die search service, ohne den Index neu zu erstellen oder Dokumente zu löschen.
Abfragen des Indexes
Die Abfrageskripts führen drei Abfragen nacheinander aus, beginnend mit einer einfachen semantischen Suche und fortschreitend bis zu einer semantischen Rangfolge, die durch Beschriftungen und Antworten ergänzt wird.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Das semanticQuery.ts Skript zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge mit typsicheren Ergebnissen.
import { SearchClient }
from "@azure/search-documents";
import {
HotelDocument, credential,
searchEndpoint, indexName,
semanticConfigurationName
} from "./config.js";
const searchClient =
new SearchClient<HotelDocument>(
searchEndpoint, indexName, credential
);
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
Wichtige Erkenntnisse:
-
SearchClient<HotelDocument>bietet typsicheren Zugriff für den Zugriff auf Dokumentfelder in den Ergebnissen, mit Autovervollständigung für Feldnamen inselectundresult.document. -
queryType: "semantic"aktiviert die semantische Rangfolge für die Abfrage. -
semanticSearchOptions.configurationNameGibt an, welche semantische Konfiguration verwendet werden soll.
Semantische Abfrage mit Beschriftungen
Das semanticQueryReturnCaptions.ts Skript fügt Beschriftungen hinzu, um die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei trefferheraushebungen auf die wichtigen Begriffe und Ausdrücke angewendet werden.
const results = await searchClient.search(
"walking distance to live music",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive",
highlight: true
}
},
select: [
"HotelId", "HotelName", "Description"
]
}
);
for await (const result of results.results) {
const captions = result.captions;
if (captions && captions.length > 0) {
const caption = captions[0];
if (caption.highlights) {
console.log(
`Caption: ${caption.highlights}`
);
}
}
}
Wichtige Erkenntnisse:
-
captions.captionType: "extractive"aktiviert extraktive Beschriftungen aus den Inhaltsfeldern. - Beschriftungen heben die relevantesten Passagen hervor und fügen
<em>-Markierungen zu wichtigen Begriffen hinzu.
Semantische Abfrage mit Antworten
Das semanticAnswer.ts Skript fügt semantische Antworten hinzu. Sie verwendet eine Frage als Suchtext, da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Wenn Antworten für Ihr Szenario nicht hilfreich sind, lassen Sie answers aus Ihrem Code. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
const results = await searchClient.search(
"What's a good hotel for people who "
+ "like to read",
{
queryType: "semantic",
semanticSearchOptions: {
configurationName:
semanticConfigurationName,
captions: {
captionType: "extractive"
},
answers: {
answerType: "extractive"
}
},
select: [
"HotelName", "Description", "Category"
]
}
);
const semanticAnswers = results.answers;
for (const answer of semanticAnswers || []) {
if (answer.highlights) {
console.log(
`Semantic Answer: ${answer.highlights}`
);
} else {
console.log(
`Semantic Answer: ${answer.text}`
);
}
console.log(
`Semantic Answer Score: ${answer.score}`
);
}
Wichtige Erkenntnisse:
-
answers.answerType: "extractive"ermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
-
results.answersruft die Antwortobjekte getrennt von den Suchergebnissen ab.
In dieser Schnellstartanleitung verwenden Sie die Azure AI Search REST-APIs um semantic ranking zu einem vorhandenen Suchindex hinzuzufügen und den Index abzufragen.
Bei der semantischen Rangfolge handelt es sich um abfrageseitige Funktionen, die maschinelle Leseverständnis verwenden, um Suchergebnisse neu zu bewerten und die semantisch relevantesten Übereinstimmungen am Anfang der Liste zu fördern. Sie können einem vorhandenen Index eine semantische Konfiguration hinzufügen, ohne dass eine Neuerstellung erforderlich ist. Die semantische Rangfolge ist für informations- oder beschreibenden Text am effektivsten.
Tipp
Wollen Sie gleich loslegen? Laden Sie den source-Code auf GitHub herunter.
Voraussetzungen
Ein Azure Konto mit einem aktiven Abonnement. Ein Konto kostenlos erstellen.
Ein Azure KI-Suchdienst mit aktiviertem semantischem Ranker.
Ein Index mit beschreibenden Textfeldern, die als
searchableundretrievablebezeichnet sind. In diesem Schnellstart wird davon ausgegangen, dass der Hotels-Beispielindex existiert.Visual Studio Code mit der REST-Clienterweiterung.
Git zum Klonen des Beispiel-Repositorys.
Die Azure CLI für die schlüssellose Authentifizierung mit Microsoft Entra ID.
Zugriff konfigurieren
Bevor Sie beginnen, stellen Sie sicher, dass Sie über berechtigungen zum access von Inhalten und Vorgängen in Azure AI Search verfügen. In diesem Schnellstart werden Microsoft Entra ID für die Authentifizierung und rollenbasierter Zugriff für die Autorisierung verwendet. Sie müssen ein Owner oder User Access Administrator sein, um Rollen zuzuweisen. Wenn Rollen nicht zugewiesen werden können, verwenden Sie stattdessen die schlüsselbasierte Authentifizierung.
Um den empfohlenen rollenbasierten Zugriff zu konfigurieren:
Aktivieren Sie rollenbasierten Zugriff für Ihren Suchdienst.
Weisen Sie Ihrem Benutzerkonto die folgenden Rollen zu.
Search Service Mitwirkender
Suchindexdatenleser
Hinweis
Im Gegensatz zu anderen Schnellstarts, die einen Index erstellen und laden, wird in diesem Schnellstart ein vorhandener Index vorausgesetzt, der bereits Daten enthält, sodass Sie die Rolle "Suchindex-Datenmitwirkender" nicht benötigen.
Endpunkt abrufen
Jeder Azure AI-Search-Dienst verfügt über einen endpoint, der eine eindeutige URL ist, die Netzwerkzugriff auf den Dienst identifiziert und bereitstellt. In einem späteren Abschnitt geben Sie diesen Endpunkt an, um eine programmgesteuerte Verbindung mit Ihrem search service herzustellen.
So rufen Sie den Endpunkt ab:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich die Option "Übersicht" aus.
Notieren Sie sich den Endpunkt, der wie
https://my-service.search.windows.netaussehen soll.
Beginnen mit einem Index
In dieser Schnellstartanleitung wird ein vorhandener Index so geändert, dass er eine semantische Konfiguration enthält. Wir empfehlen den Hotels-Beispielindex, den Sie in Minuten mit einem Azure portal-Assistenten erstellen können.
Um einen anderen Index zu verwenden, ersetzen Sie den Indexnamen, Feldnamen in der semantischen Konfiguration und Feldnamen in Abfrageanweisungen select im gesamten Beispielcode. Ihr Index sollte beschreibende Textfelder enthalten, die als searchable und retrievable.
So überprüfen und abfragen Sie den Hotels-Beispielindex vor der semantischen Rangfolge:
Melden Sie sich beim Azure Portal an und wählen Sie Ihren Suchdienst aus.
Wählen Sie im linken Bereich "Suchverwaltungsindizes>" aus.
Wählen Sie hotels-sample aus.
Wählen Sie semantische Konfigurationen aus, um vorhandene Konfigurationen anzuzeigen. Wenn Sie die semantische Rangfolge während des Assistentenerstellungsablaufs aktiviert haben, sollte eine Standardkonfiguration vorhanden sein.
Wählen Sie den Such-Explorer und dann dieJSON-Ansicht anzeigen> aus.
Fügen Sie den folgenden JSON in den Abfrage-Editor ein.
{ "search": "walking distance to live music", "select": "HotelId, HotelName, Description", "count": true }Wählen Sie "Suchen" aus, um die Abfrage auszuführen.
Die Antwort sollte dem folgenden Beispiel ähneln. Dies ist eine Volltextabfrage, die von BM25 bewertet wird, sodass die Ergebnisse auf einzelnen Abfragebegriffen und sprachlichen Varianten und nicht auf die Gesamtbedeutung der Abfrage übereinstimmen. Zum Beispiel passt
walkingzuwalk, undliveundmusicpassen unabhängig voneinander und nicht als Ausdruck zusammen."@odata.count": 30, "value": [ { "@search.score": 5.004435, "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. The hotel also regularly hosts events like wine tastings, beer dinners, and live music." }, { "@search.score": 4.555706, "HotelId": "24", "HotelName": "Uptown Chic Hotel", "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance." }, { "@search.score": 3.5625167, "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Cliff 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 Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience." }, ... // Trimmed for brevity ]Tipp
Diese Abfrage zeigt, wie die Antwort aussieht, bevor die semantische Rangfolge angewendet wird. Nachdem Sie eine semantische Konfiguration konfiguriert haben, fügen Sie hinzu
"queryType": "semantic", und"semanticConfiguration": "semantic-config"um zu sehen, wie dieselbe Abfrage nach semantischer Rangfolge unterschiedlich bewertet wird.
Einrichten der Umgebung
Verwenden Sie Git, um das Beispiel-Repository zu klonen.
git clone https://github.com/Azure-Samples/azure-search-rest-samplesNavigieren Sie zum Schnellstartordner, und öffnen Sie ihn in Visual Studio Code.
cd azure-search-rest-samples/Quickstart-semantic-ranking code .Ersetzen Sie in
semantic-index-update.restden Platzhalterwert für@searchUrldurch die URL, die Sie im Get-Endpunkt abgerufen haben.Wiederholen Sie den vorherigen Schritt für
semantic-query.rest.Melden Sie sich für die schlüssellose Authentifizierung mit Microsoft Entra ID bei Ihrem Azure-Konto an. Wenn Sie über mehrere Abonnements verfügen, wählen Sie das Abonnement aus, das Ihre Azure AI-Search service enthält.
az loginGenerieren Sie für die schlüssellose Authentifizierung mit Microsoft Entra ID ein access-Token.
az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsvErsetzen Sie in beiden
.restDateien den Platzhalterwert für@personalAccessTokendurch das Token aus dem vorherigen Schritt.
Ausführen des Codes
Öffnen Sie
semantic-index-update.rest.Wählen Sie " Anforderung senden" für die erste GET-Anforderung aus, um Ihre Verbindung zu überprüfen.
Im angrenzenden Bereich sollte eine Antwort angezeigt werden. Wenn Sie über vorhandene Indizes verfügen, werden sie anhand des Namens aufgelistet. Wenn der HTTP-Code lautet
200 OK, können Sie fortfahren.Senden Sie die
### Update the hotels-sample index to include a semantic configurationAnforderung, um dem Index eine semantische Konfiguration hinzuzufügen.Wenn sie einen
400 Bad RequestFehler erhalten, unterscheidet sich Ihr Indexschema vom Beispiel. Senden Sie die### Get the schema of the indexAnforderung, kopieren Sie den Antwort-JSON-Code, fügen Sie densemanticAbschnitt aus dem Quellcode zum JSON hinzu, und ersetzen Sie den PUT-Anforderungstext durch Ihr zusammengeführtes Schema.Wechseln Sie zu
semantic-query.restund senden Sie die Anfragen nacheinander: Eine einfache Abfrage zum Vergleich der Ausgangsbasis und dann semantische Abfragen mit Rangfolge, Beschriftungen und Antworten.
Output
Die Send a search query to the hotels-sample index Anforderung gibt Ergebnisse zurück, die nach BM25-Relevanz bewertet wurden, was durch das @search.score Feld angegeben wird.
{
"@odata.count": 30,
"value": [
{
"@search.score": 5.004435,
"HotelId": "2",
"HotelName": "Old Century Hotel",
"Description": "The hotel is situated in a nineteenth century plaza..."
},
// Trimmed for brevity
]
}
Die Send a search query to the hotels-sample index with semantic ranking Anforderung fügt @search.rerankerScore hinzu. Beachten Sie, dass sich die Reihenfolge aus der einfachen Abfrage ändert.
{
"@odata.count": 30,
"@search.answers": [],
"value": [
{
"@search.score": 4.555706,
"@search.rerankerScore": 2.613231658935547,
"HotelId": "24",
"HotelName": "Uptown Chic Hotel",
"Description": "Chic hotel near the city. High-rise hotel in downtown..."
},
// Trimmed for brevity
]
}
Die Return captions in the query Anforderung fügt @search.captions mit extrahiertem Text und Hervorhebungen hinzu.
{
"value": [
{
"@search.score": 4.555706,
"@search.rerankerScore": 2.613231658935547,
"@search.captions": [
{
"text": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops...",
"highlights": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to<em> theaters, </em>art galleries, restaurants and shops..."
}
],
"HotelId": "24",
"HotelName": "Uptown Chic Hotel"
},
// Trimmed for brevity
]
}
Die Return semantic answers in the query Anfrage liefert eine extraktive Antwort in @search.answers, wenn die Abfrage als Frage formuliert wird.
{
"@odata.count": 46,
"@search.answers": [
{
"key": "38",
"text": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night...",
"highlights": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the<em> library </em>by night...",
"score": 0.9829999804496765
}
],
"value": [
{
"@search.score": 2.060124,
"@search.rerankerScore": 2.124817371368408,
"@search.captions": [
{
"text": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city...",
"highlights": "This classic hotel is<em> fully-refurbished </em>and ideally located on the main commercial artery of the city..."
}
],
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel"
},
// Trimmed for brevity
]
}
Grundlegendes zum Code
Hinweis
Möglicherweise wurden die Codeausschnitte in diesem Abschnitt zur Lesbarkeit geändert. Ein vollständiges Arbeitsbeispiel finden Sie im Quellcode.
Nachdem Sie den Code ausgeführt haben, lassen Sie uns die wichtigsten Schritte aufschlüsseln:
- Konfiguration und Authentifizierung
- Aktualisieren des Indexes mit einer semantischen Konfiguration
- Abfragen des Indexes
Konfiguration und Authentifizierung
Beide .rest Dateien definieren Variablen oben für die Wiederverwendung für alle Anforderungen.
@searchUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
@personalAccessToken = PUT-YOUR-PERSONAL-ACCESS-TOKEN-HERE
@api-version = 2025-09-01
Wichtige Erkenntnisse:
-
@searchUrlist der Endpunkt Ihres search service. -
@personalAccessTokenist ein Microsoft Entra ID Token, das vom Azure CLI abgerufen wird. Dadurch werden API-Schlüssel durch die schlüssellose Authentifizierung ersetzt. -
Authorization: Bearer {{personalAccessToken}}ist in jedem Anforderungsheader für die Authentifizierung enthalten.
Aktualisieren des Indexes mit einer semantischen Konfiguration
Die ### Update the hotels-sample index to include a semantic configuration Anforderung in semantic-index-update.rest sendet das vollständige Indexschema zusammen mit einem neuen semantic Abschnitt. Die REST-API erfordert das vollständige Schema für jeden Updatevorgang, sodass Sie nicht nur die semantische Konfiguration senden können.
Die Schlüsselzugabe ist der semantic Abschnitt:
"semantic": {
"configurations": [
{
"name": "semantic-config",
"rankingOrder":
"BoostedRerankerScore",
"prioritizedFields": {
"titleField": {
"fieldName": "HotelName"
},
"prioritizedContentFields": [
{
"fieldName": "Description"
}
],
"prioritizedKeywordsFields": [
{
"fieldName": "Tags"
}
]
}
}
]
}
Wichtige Erkenntnisse:
-
titleFieldgibt an, welches Feld den Dokumenttitel für die semantische Auswertung enthält. -
prioritizedContentFieldsidentifiziert die Hauptinhaltsfelder. Der semantische Rangierer wertet diese zuerst aus, wenn die Relevanz bewertet wird. -
prioritizedKeywordsFieldsidentifiziert Schlüsselwort- oder Tagfelder für zusätzlichen Kontext. -
rankingOrder: BoostedRerankerScorekombiniert den BM25-Bewertungscore mit dem semantischen Reranking-Score. - Die REST-API erfordert das vollständige Schema für PUT-Vorgänge. Nur der
semanticAbschnitt ist neu. Alle anderen Felder sind unverändert.
Abfragen des Indexes
Die Anforderungen in semantic-query.rest entwickeln sich von einer einfachen Schlüsselwortsuche zu einer semantischen Einordnung mit Untertiteln und Antworten. Alle Abfragen sind POST-Anforderungen an die Dokumente - Search Post (REST-API).
Einfache Abfrage
Die ### Send a search query to the hotels-sample index Anforderung ist eine einfache Schlüsselwortsuche, die keine semantische Rangfolge verwendet. Sie dient als Basis für den Vergleich von Ergebnissen mit und ohne semantischen Neuranking.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "simple"
}
Wichtige Erkenntnisse:
-
queryType: "simple"verwendet den standardmäßigen BM25-Bewertungsalgorithmus. - Die Ergebnisse werden nur nach Schlüsselwortrelevanz (
@search.score) bewertet.
Semantische Abfrage (keine Beschriftungen, keine Antworten)
Die ### Send a search query to the hotels-sample index with semantic ranking Anforderung fügt semantische Rangfolge hinzu. Der folgende JSON-Code zeigt die Mindestanforderung für das Aufrufen der semantischen Rangfolge.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config"
}
Wichtige Erkenntnisse:
-
queryType: "semantic"aktiviert die semantische Rangfolge für die Abfrage. -
semanticConfigurationGibt an, welche semantische Konfiguration verwendet werden soll.
Semantische Abfrage mit Beschriftungen
Die ### Return captions in the query Anforderung fügt Beschriftungen hinzu, um die relevantesten Passagen aus jedem Ergebnis zu extrahieren, wobei die Trefferheraushebung auf die wichtigen Begriffe und Ausdrücke angewendet wird.
{
"search":
"walking distance to live music",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true"
}
Wichtige Erkenntnisse:
-
captions: "extractive|highlight-true"ermöglicht extraktive Beschriftungen mit<em>Tags um wichtige Begriffe herum. - Beschriftungen werden im
@search.captionsArray für jedes Ergebnis angezeigt.
Semantische Abfrage mit Antworten
Die ### Return semantic answers in the query Anforderung fügt semantische Antworten hinzu. Sie verwendet eine Frage als Suchtext, da semantische Antworten am besten funktionieren, wenn die Abfrage als Frage formuliert wird. Die Antwort ist eine aus Ihrem Index extrahierte Verbatim-Passage, keine zusammengesetzte Antwort aus einem Chat-Vervollständigungsmodell.
Die Abfrage und der indizierte Inhalt müssen eng ausgerichtet sein, damit eine Antwort zurückgegeben wird. Wenn kein Kandidat den Konfidenzschwellenwert erfüllt, enthält die Antwort keine Antwort. In diesem Beispiel wird eine Frage verwendet, die bekannt ist, um ein Ergebnis zu erzeugen, damit Sie die Syntax sehen können. Wenn Antworten für Ihr Szenario nicht hilfreich sind, lassen Sie den answers Parameter aus Ihrer Anforderung weg. Berücksichtigen Sie für zusammengesetzte Antworten ein RAG-Muster oder einen agentischen Abruf.
{
"search":
"what's a good hotel for people who like to read",
"select":
"HotelId, HotelName, Description",
"count": true,
"queryType": "semantic",
"semanticConfiguration": "semantic-config",
"captions": "extractive|highlight-true",
"answers": "extractive"
}
Wichtige Erkenntnisse:
-
answers: "extractive"ermöglicht extrahierende Antworten für fragenähnliche Abfragen. - Antworten werden im Array der obersten Ebene
@search.answersangezeigt, getrennt von einzelnen Ergebnissen. - Antworten sind aus Ihrem Index extrahierte Inhalte, nicht generierter Text.
Bereinigen von Ressourcen
Wenn Sie in Ihrem eigenen Abonnement arbeiten, ist es eine gute Idee, ein Projekt abzuschließen, indem Sie die Ressourcen entfernen, die Sie nicht mehr benötigen. Ressourcen, die nicht genutzt aber ausgeführt werden, können Sie Geld kosten.
Wählen Sie im Azure portal All resources or Resource groups im linken Bereich aus, um Ressourcen zu suchen und zu verwalten. Sie können Ressourcen einzeln löschen oder die Ressourcengruppe löschen, um alle Ressourcen gleichzeitig zu entfernen.