Konfigurieren eines Vorschlagers für autoVervollständigen und vorgeschlagene Übereinstimmungen in einer Abfrage

In Azure AI Search wird typeahead (autovervollständigen) oder "search-as-you-type" über einen Suggester aktiviert. Ein Suggester ist eine Konfiguration in einem Index, der angibt, welche Felder zum Auffüllen von AutoVervollständigen und Vorschlägen verwendet werden sollen. Diese Felder unterliegen einer zusätzlichen Tokenisierung, wobei Präfixsequenzen generiert werden, um Übereinstimmungen bei teilweisen Ausdrücken zu unterstützen. Ein Suggestor, der z. B. ein Feld „City" mit dem Wert „Seattle" enthält, verfügt über Präfixkombinationen von „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ändigend sein, und welches eine Teileingabe für eine ganze Begriffsabfrage vervollständigt, oder Vorschläge, die zum Durchklicken zu einem bestimmten Treffer einladen. AutoVervollständigen führt zu einer Abfrage. Vorschläge führen zu einem übereinstimmenden Dokument.

Der folgende Screenshot veranschaulicht beide. AutoVervollständigen erwartet einen potenziellen Begriff und ergänzt etwa „Zw“ mit „illing“. Vorschläge sind Minisuchergebnisse, bei denen ein Feld wie „Hotelname“ für ein entsprechendes Hotelsuchdokument aus dem Index steht. Für Vorschläge können Sie alle Felder bereitstellen, die beschreibende Informationen enthalten.

Visual comparison of autocomplete and suggested queries

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. Im weiteren Verlauf dieses Artikels geht es um die Erstellung einer Vorschlagsfunktion.

  • Rufen Sie eine suggester-fähige Abfrage in Form einer Vorschlagsanforderung oder AutoVervollständigen-Anforderung mithilfe einer der APIs auf, die in einem späteren Abschnitt aufgeführt sind.

Such-as-you-type ist pro Feld 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 richten sich an die Dokumentensammlung bestimmter Indexe und Antworten werden zurückgegeben, nachdem ein Benutzer mindestens eine dreistellige Eingabezeichenfolge bereitstellt.

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. Die beste Zeit zum Erstellen eines Vorschlagers ist, wenn Sie auch das Feld definieren, das es verwendet.

  • Verwenden Sie nur Zeichenfolgenfelder.

  • Wenn das Zeichenfolgenfeld Teil eines komplexen Typs ist (z. B. ein Feld Stadt innerhalb von Addresse), schließen Sie das Eltern-Feld in den Feldpfad ein: "Address/City" (REST und 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, einen Vorschlager mit bereits vorhandenen Feldern zu erstellen, ist die API nicht zulässig. Präfixe werden während der Indizierung erstellt, wenn partielle Begriffe in Kombinationen aus mehreren Zeichen zusammen mit ganzen Begriffen in Token umgewandelt werden. Da vorhandene Felder bereits tokenisiert sind, müssen Sie den Index neu erstellen, wenn Sie sie einem Vorschlager hinzufügen möchten. Weitere Informationen finden Sie unter Neuerstellen eines Azure AI Search-Indexes.

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 gezeichnet werden kann, da der zusätzliche Inhalt mehr Potenzial für den Abschluss von Begriffen hat.

Andererseits führen Vorschläge zu besseren Ergebnissen, wenn die Feldauswahl selektiv ist. Denken Sie daran, dass der Vorschlag ein Proxy für ein Suchdokument ist, sodass Sie Felder auswählen, die ein einzelnes Ergebnis am besten darstellen. Namen, Titel oder andere eindeutige Felder, die für Unterscheidung zwischen mehreren Übereinstimmungen sorgen, funktionieren am besten. Wenn Felder aus sich wiederholenden Werten bestehen, bestehen die Vorschläge aus identischen Ergebnissen, und ein Benutzer weiß nicht, welches Feld ausgewählt werden soll.

Um sowohl such-as-you-type-Oberflächen zu erfüllen, fügen Sie alle Felder hinzu, die Sie für autoVervollständigen benötigen, verwenden selectsie dann jedoch , top, filterund searchFields steuern Sie Ergebnisse für Vorschläge.

Auswählen der Analysetools

Die Auswahl einer Analyse bestimmt, wie Felder tokenisiert und präfixiert werden. Bei einer Bindestrichzeichenfolge wie "kontextsensitiv" führt die Verwendung einer Sprachanalyse z. B. zu folgenden Tokenkombinationen: "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 Analysatoren oder integrierte Analysatoren verwenden (mit Ausnahme von Standard Lucene), sind explizit nicht zulässig, um schlechte 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 Vorschlagsfunktionen verfügen, während das andere mit einer benutzerdefinierten Analysetoolkonfiguration eingerichtet wird.

Erstellen über das Portal

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 „Vorschläge“. 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 über 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 für das Feld angegeben wird, muss es sich um ein benanntes lexikalisches Analysetool aus dieser Liste (kein benutzerdefiniertes Analysetool) handeln.

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 ohnehin „category“ 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. Wie bei allen Abfragen gilt der Vorgang für die Dokumentenauflistung eines Indexes, und die Abfrage enthält einen search Parameter, der in diesem Fall die Teilabfrage bereitstellt. Zweitens müssen Sie der Anforderung hinzufügen suggesterName . Wenn ein Vorschlager nicht im Index definiert ist, schlagen Aufrufe von AutoVervollständigen oder Vorschlägen fehl.

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

Beispielcode

Nächste Schritte

Erfahren Sie mehr über Anforderungen\ Formulierungen.