Konfigurieren einer Vorschlagsfunktion für AutoVervollständigen und Vorschläge in einer Abfrage

In Azure KI-Suche wird die Textvervollständigung (Typeahead) oder „Suchen während Sie schreiben" durch eine Vorschlagsfunktion ermöglicht. Eine Vorschlagsfunktion ist eine Konfiguration in einem Index, die angibt, welche Felder zum Auffüllen von AutoVervollständigen und vorgeschlagenen Übereinstimmungen verwendet werden sollen. Diese Felder werden einer zusätzlichen Tokenisierung unterzogen, wobei Präfixsequenzen zur Unterstützung von Übereinstimmungen bei Teilausdrücken generiert werden. Beispiel: Eine Vorschlagsfunktion, die ein Feld city mit einem Wert für Seattle enthält, hat Präfixkombinationen für sea, seat, seatt und seattl, um Typeahead zu unterstützen.

Übereinstimmungen auf Teilbegriffen können entweder eine automatisch vervollständigte Abfrage oder eine vorgeschlagene Übereinstimmung sein. Der gleiche Suggestor unterstützt beide Erfahrungen.

Typeahead kann AutoVervollständigen verwenden, wodurch eine Teileingabe für eine ganze Begriffsabfrage vervollständigt wird, oder Vorschläge, die zum Durchklicken zu einer bestimmten Übereinstimmung einladen. AutoVervollständigen führt zu einer Abfrage. Vorschläge führen zu einem übereinstimmenden Dokument.

Der folgende Screenshot veranschaulicht beides. AutoVervollständigen erwartet einen potenziellen Begriff und ergänzt tw mit in. Vorschläge sind Minisuchergebnisse, bei denen ein Feld wie hotel name ein übereinstimmendes Hotelsuchdokument aus dem Index darstellt. Für Vorschläge können Sie alle Felder bereitstellen, die beschreibende Informationen enthalten.

Screenshot zeigt den visuellen Vergleich zwischen AutoVervollständigen und vorgeschlagenen Abfragen.

Sie können diese Features einzeln oder zusammen verwenden. Um dieses Verhalten in Azure AI Search zu implementieren, gibt es eine Index- und eine Abfragekomponente.

  • Fügen Sie eine Vorschlagsfunktion einer Suchindexdefinition hinzu. Der weitere Verlauf dieses Artikels konzentriert sich auf die Erstellung einer Vorschlagsfunktion.

  • Rufen Sie eine von einer Vorschlagsfunktion unterstützten Abfrage auf in Form einer Vorschlags- oder AutoVervollständigen-Anforderung, indem Sie eine der in Verwenden einer Vorschlagsfunktion aufgeführten APIs verwenden.

Die Suche während der Eingabe wird auf Feldebene für Zeichenfolgenfelder aktiviert. Sie können beide Verhaltensweisen für Eingabevorschläge in derselben Suchlösung implementieren, wenn Sie ein ähnliches Erlebnis wie im Screenshot wünschen. Beide Anforderungen zielen auf die Dokumentensammlung eines bestimmten Indexes ab, und die Antworten werden zurückgegeben, nachdem ein Benutzer eine Zeichenfolge aus mindestens drei Zeichen eingegeben hat.

Erstellen einer Vorschlagsfunktion

Um eine Vorschlagsfunktion zu erstellen, fügen Sie sie einer Indexdefinition hinzu. Ein Suggestor nimmt einen Namen und eine Sammlung von Feldern, über die das Typeahead-Erlebnis aktiviert ist. Der beste Zeitpunkt zum Erstellen einer Vorschlagsfunktion ist bei der Definition des Felds, für das sie verwendet wird.

  • Verwenden Sie nur Zeichenfolgenfelder.

  • Wenn das Zeichenfolgenfeld Teil eines komplexen Typs ist (z. B. ein Feld „Stadt“ innerhalb von „Adresse“), schließen Sie das übergeordnete Feld in den Feldpfad ein: "Address/City" (REST, C# und Python), oder ["Address"]["City"] (JavaScript).

  • Verwenden Sie für das Feld das standardmäßige Lucene-Standardanalysetool ("analyzer": null) oder ein Sprachanalysetool (z. B. "analyzer": "en.Microsoft").

Wenn Sie versuchen, eine Vorschlagsfunktion mithilfe bereits vorhandener Felder zu erstellen, wird dies von der API nicht zugelassen. Präfixe werden während der Indizierung erstellt, wenn partielle Begriffe in Kombinationen aus mehreren Zeichen zusammen mit ganzen Begriffen in Token umgewandelt werden. Wenn vorhandene Felder bereits tokenisiert sind, müssen Sie den Index neu erstellen, wenn Sie ihn zu einer Vorschlagsfunktion hinzufügen möchten. Weitere Informationen finden Sie unter Aktualisieren oder Neuerstellen eines Indexes in Azure KI-Suche.

Auswählen von Feldern

Auch wenn eine Vorschlagsfunktion über mehrere Eigenschaften verfügt, handelt es sich in erster Linie jedoch um eine Sammlung von Zeichenfolgenfeldern, für die Sie eine Umgebung für die Suche während der Eingabe aktivieren. Es gibt für jeden Index eine Vorschlagsfunktion. Daher muss die Liste der Vorschlagsfunktionen alle Felder enthalten, die Inhalte für Vorschläge und AutoVervollständigen beitragen.

AutoVervollständigen profitiert von einem größeren Pool von Feldern, aus denen Begriffe abgerufen werden können, da der zusätzliche Inhalt mehr Potenzial für die Vervollständigung von Begriffen bietet.

Andererseits führen Vorschläge zu besseren Ergebnissen, wenn die Feldauswahl selektiv ist. Denken Sie daran, dass es sich bei einem Vorschlag um einen Proxy für ein Suchdokument handelt. Daher sollten Sie Felder auswählen, die ein Einzelergebnis am besten darstellen. Namen, Titel oder andere eindeutige Felder, die für Unterscheidung zwischen mehreren Übereinstimmungen sorgen, funktionieren am besten. Wenn Felder aus wiederkehrenden Werten bestehen, setzen sich die Vorschläge aus identischen Ergebnissen zusammen, und Benutzer wissen nicht, welches sie auswählen sollen.

Um beide Suchanforderungen zu erfüllen, fügen Sie alle Felder hinzu, die Sie für die automatische Vervollständigung benötigen, verwenden dann jedoch select, top, filter und searchFields, um die Ergebnisse für Vorschläge zu steuern.

Auswählen der Analysetools

Durch die Auswahl eines Analysetools legen Sie fest, wie Felder in Token umgewandelt und mit einem Präfix versehen werden. Beispielsweise resultiert die Verwendung eines Sprachanalysetools für eine Zeichenfolge wie context-sensitive zu diesen Token-Kombinationen: context, sensitive, context-sensitive. Wenn Sie das Standard-Lucene-Analysetool verwenden, ist die Zeichenfolge mit dem Bindestrich nicht enthalten.

Berücksichtigen Sie bei der Auswertung von Analysetools auch die Verwendung der API für die Textanalyse, um zu erkennen, wie Begriffe verarbeitet werden. Beim Erstellen eines Indexes können Sie verschiedene Analysetools für eine Zeichenfolge ausprobieren, um sich die ausgegebenen Token anzusehen.

Felder, die benutzerdefinierte Analysetools oder integrierte Analysetools verwenden (mit Ausnahme von Standard Lucene) sind explizit nicht zulässig, um mangelhafte Ergebnisse zu vermeiden.

Hinweis

Wenn Sie Einschränkungen der Analysetools umgehen müssen, z. B. wenn Sie ein Schlüsselwort oder eine NGram-Analyse für bestimmte Abfrageszenarien benötigen, sollten Sie zwei separate Felder für denselben Inhalt verwenden. Eines der Felder kann so über eine Vorschlagsfunktion verfügen, während das andere mit einer benutzerdefinierten Analysetoolkonfiguration eingerichtet wird.

Erstellen mithilfe des Azure-Portals

Wenn Sie einen Index mit Index hinzufügen oder dem Datenimport-Assistenten erstellen, können Sie dabei eine Vorschlagsfunktion aktivieren:

  1. Geben Sie in der Indexdefinition einen Namen für die Vorschlagsfunktion ein.

  2. Aktivieren Sie in den einzelnen Felddefinitionen für neue Felder das Kontrollkästchen in der Spalte Vorschlagsfunktion. Nur Zeichenfolgenfelder verfügen über ein Kontrollkästchen.

Wie bereits erwähnt, wirkt sich die Auswahl des Analysetools auf die Tokenisierung und das Voranstellen von Präfixen aus. Beachten Sie beim Aktivieren der Vorschlagsfunktion die gesamte Felddefinition.

Erstellen mit der REST-API

Fügen Sie Vorschlagsfunktionen in der REST-API mittels Index erstellen oder Index aktualisieren hinzu.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Erstellen mit .NET

Definieren Sie in C# ein SearchSuggester-Objekt. Suggesters ist eine Sammlung für ein SearchIndex-Objekt, es akzeptiert aber nur ein Element. Fügen Sie eine Vorschlagsfunktion zur Indexdefinition hinzu.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Eigenschaftsverweis

Eigenschaft Beschreibung
name Dies wird in der Definition der Vorschlagsfunktion angegeben, kann aber auch für eine AutoVervollständigen- oder Vorschlagsanforderung aufgerufen werden.
sourceFields In der Vorschlagsfunktionsdefinition angegeben. Es handelt sich dabei um eine Liste mit mindestens einem Feld, die als Quelle für den Inhalt von Vorschlägen dient. Felder müssen vom Typ Edm.String sein. Wenn ein Analysetool im Feld angegeben ist, muss es sich um ein benanntes lexikalisches Analysetool handeln, das auf LexicalAnalyzerName Struct (kein benutzerdefiniertes Analysetool) aufgeführt ist.

Folgende Vorgehensweise wird empfohlen: Geben Sie nur die Felder an, die sich für eine erwartete und angemessene Antwort eignen, sei es eine vollständige Zeichenfolge in einer Suchleiste oder eine Dropdownliste.

Ein Hotelname ist ein guter Kandidat, weil er präzise ist. Ausführliche Felder wie Beschreibungen und Kommentare sind zu informationsreich. Sich wiederholende Felder wie Kategorien und Tags sind ebenso weniger effektiv. In den Beispielen schließen wir Kategorie ohnehin ein, um zu zeigen, dass Sie mehrere Felder einbeziehen können.
searchMode Parameter nur für REST, wird aber auch im Portal angezeigt. Dieser Parameter ist im .NET SDK nicht verfügbar. Gibt die Strategie an, mit der nach möglichen Ausdrücken gesucht wird. Aktuell wird nur der Modus analyzingInfixMatching unterstützt, der derzeit am Anfang eines Begriffs Übereinstimmungen findet.

Verwenden einer Vorschlagsfunktion

Eine Vorschlagsfunktion wird in einer Abfrage verwendet. Nachdem Sie eine Vorschlagsfunktion erstellt haben, rufen Sie eine der folgenden APIs auf, um eine Umgebung für die Suche während der Eingabe bereitzustellen:

In einer Suchanwendung sollte für Clientcode eine Bibliothek wie jQuery UI Autocomplete verwendet werden, um die partielle Abfrage zu erfassen und die Übereinstimmung bereitzustellen. Weitere Informationen zu dieser Aufgabe finden Sie unter Hinzufügen von AutoVervollständigen oder Vorschlägen zu Clientcode.

Die Verwendung der API wird im folgenden Aufruf der AutoVervollständigen-REST-API veranschaulicht. In diesem Beispiel ergeben sich zwei wichtige Erkenntnisse. Zunächst wird, wie bei allen Abfragen, gegen die Dokumentenerfassung eines Indexes operiert und die Abfrage enthält einen search-Parameter, der in diesem Fall die Teilabfrage liefert. Zweitens müssen Sie suggesterName zur Anforderung hinzufügen. Wenn eine Vorschlagsfunktion nicht im Index definiert ist, tritt bei einem Aufruf von „AutoVervollständigen“ oder „Vorschläge“ ein Fehler auf.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2024-07-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Beispielcode

Informationen zum Verwenden eines Open Source-Vorschlagspakets für die Vervollständigung von Teilbegriffen in der Client-App finden Sie unter Erkunden des .NET-Suchcodes.

Nächster Schritt

Erfahren Sie mehr über das Formulieren von Anforderungen.