Konfigurowanie sugestora pod kątem autouzupełniania i sugerowanych dopasowań w zapytaniu

W usłudze Azure AI Search funkcja typeahead (autouzupełnianie) lub "search-as-you-type" jest włączona za pośrednictwem sugestora. Sugestor to konfiguracja w indeksie określająca, które pola powinny być używane do wypełniania autouzupełniania i sugestii. Te pola przechodzą dodatkową tokenizację, generując sekwencje prefiksów w celu obsługi dopasowań na częściowych terminach. Na przykład sugestor zawierający pole City z wartością "Seattle" będzie zawierać kombinacje prefiksów "sea", "seat", "seatt" i "seattl", aby obsługiwać typeahead.

Dopasowania dotyczące częściowych terminów mogą być autouzupełnianym zapytaniem lub sugerowanym dopasowaniem. Ten sam sugestor obsługuje oba środowiska.

Typahead może być autouzupełnianie, które kończy częściowe dane wejściowe dla całego zapytania terminowego lub sugestie , które zapraszają kliknięcie do określonego dopasowania. Autouzupełnianie tworzy zapytanie. Sugestie tworzą pasujący dokument.

Poniższy zrzut ekranu przedstawia oba te elementy. Autouzupełnianie przewiduje potencjalny termin, kończąc ciąg "tw" z "in". Sugestie to mini wyniki wyszukiwania, w których pole, takie jak nazwa hotelu, reprezentuje pasujący dokument wyszukiwania w hotelu z indeksu. W przypadku sugestii można wyświetlić dowolne pole zawierające opisowe informacje.

Visual comparison of autocomplete and suggested queries

Te funkcje można używać oddzielnie lub razem. Aby zaimplementować te zachowania w usłudze Azure AI Search, istnieje składnik indeksu i zapytania.

  • Dodaj sugestor do definicji indeksu wyszukiwania. Pozostała część tego artykułu koncentruje się na tworzeniu sugestora.

  • Wywołaj zapytanie z obsługą sugestora w postaci żądania sugestii lub żądania autouzupełniania, używając jednego z interfejsów API wymienionych w późniejszej sekcji.

Typ wyszukiwania zgodnie z rzeczywistym typem jest włączony dla pól ciągów dla poszczególnych pól. Oba zachowania typu można zaimplementować w ramach tego samego rozwiązania wyszukiwania, jeśli chcesz, aby środowisko było podobne do przedstawionego na zrzucie ekranu. Oba żądania dotyczą kolekcji dokumentów określonych indeksów i odpowiedzi są zwracane po udostępnieniu przez użytkownika co najmniej trzech znaków ciągu wejściowego.

Jak utworzyć sugestor

Aby utworzyć sugestor, dodaj go do definicji indeksu. Sugestor przyjmuje nazwę i kolekcję pól, dla których jest włączone środowisko typeahead. Najlepszym sposobem utworzenia sugestora jest definiowanie pola, które go używa.

  • Użyj tylko pól ciągów.

  • Jeśli pole ciągu jest częścią typu złożonego (na przykład pole Miasto w obszarze Adres), uwzględnij element nadrzędny w ścieżce pola: "Address/City" (REST i C# i Python) lub ["Address"]["City"] (JavaScript).

  • Użyj domyślnego standardowego analizatora Lucene ("analyzer": null) lub analizatora języka (na przykład "analyzer": "en.Microsoft") w polu.

Jeśli spróbujesz utworzyć sugestor przy użyciu wstępnie istniejących pól, interfejs API nie zezwala na to. Prefiksy są generowane podczas indeksowania, gdy częściowe terminy w co najmniej dwóch kombinacjach znaków są tokenizowane obok całych terminów. Biorąc pod uwagę, że istniejące pola są już tokenizowane, należy ponownie skompilować indeks, jeśli chcesz dodać je do sugestora. Aby uzyskać więcej informacji, zobacz Jak odbudować indeks usługi Azure AI Search.

Wybieranie pól

Chociaż sugestor ma kilka właściwości, jest to przede wszystkim kolekcja pól ciągów, dla których włączasz środowisko wyszukiwania zgodnie z rzeczywistym typem. Istnieje jeden sugestor dla każdego indeksu, więc lista sugestorów musi zawierać wszystkie pola, które współtworzyją zawartość dla sugestii i autouzupełniania.

Autouzupełnianie korzysta z większej puli pól do rysowania, ponieważ dodatkowa zawartość ma większy potencjał uzupełniania terminów.

Z drugiej strony sugestie dają lepsze wyniki, gdy wybór pola jest selektywny. Pamiętaj, że sugestia jest serwerem proxy dla dokumentu wyszukiwania, dlatego wybierz pola, które najlepiej reprezentują pojedynczy wynik. Nazwy, tytuły lub inne unikatowe pola, które rozróżniają wiele dopasowań, działają najlepiej. Jeśli pola składają się z powtarzających się wartości, sugestie składają się z identycznych wyników, a użytkownik nie będzie wiedział, który z nich wybrać.

Aby spełnić wymagania obu środowisk wyszukiwania zgodnie z rzeczywistym użyciem, dodaj wszystkie pola potrzebne do autouzupełniania, ale następnie użyj selectpoleceń , , topfilterisearchFields, aby kontrolować wyniki pod kątem sugestii.

Wybieranie analizatorów

Wybór analizatora określa, w jaki sposób pola są tokenizowane i poprzedzone prefiksem. Na przykład w przypadku ciągu dzielenia wyrazów, takiego jak "kontekstowy", użycie analizatora języka powoduje wykonanie następujących kombinacji tokenów: "context", "sensitive", "context-sensitive". Gdyby użyto standardowego analizatora Lucene, ciąg łącznikowy nie istniałby.

Podczas oceniania analizatorów rozważ użycie interfejsu API analizowania tekstu, aby uzyskać wgląd w sposób przetwarzania terminów. Po utworzeniu indeksu możesz wypróbować różne analizatory w ciągu, aby wyświetlić dane wyjściowe tokenu.

Pola korzystające z analizatorów niestandardowych lub wbudowanych analizatorów (z wyjątkiem standardu Lucene) są jawnie niedozwolone, aby zapobiec słabym wynikom.

Uwaga

Jeśli musisz obejść ograniczenie analizatora, na przykład jeśli potrzebujesz słowa kluczowego lub analizatora ngramu dla niektórych scenariuszy zapytań, użyj dwóch oddzielnych pól dla tej samej zawartości. Pozwoli to na utworzenie jednego z pól sugestora, a drugi można skonfigurować przy użyciu niestandardowej konfiguracji analizatora.

Tworzenie przy użyciu portalu

W przypadku korzystania z kreatora Dodawania indeksu lub Importowanie danych w celu utworzenia indeksu można włączyć sugestor:

  1. W definicji indeksu wprowadź nazwę sugestora.

  2. W każdej definicji pola dla nowych pól zaznacz pole wyboru w kolumnie Sugestor. Pole wyboru jest dostępne tylko w polach ciągów.

Jak wspomniano wcześniej, wybór analizatora ma wpływ na tokenizację i prefiksowanie. Podczas włączania sugestorów należy wziąć pod uwagę całą definicję pola.

Tworzenie przy użyciu interfejsu REST

W interfejsie API REST dodaj sugestory za pomocą polecenia Utwórz indeks lub Aktualizuj indeks.

{
  "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": [
    . . .
  ]
}

Tworzenie przy użyciu platformy .NET

W języku C#zdefiniuj obiekt SearchSuggester. Suggesters jest kolekcją obiektu SearchIndex, ale może przyjmować tylko jeden element. Dodaj sugestor do definicji indeksu.

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);
}

Odwołanie do właściwości

Właściwości Opis
name Określony w definicji sugestora, ale także wywoływany na żądanie autouzupełniania lub sugestii.
sourceFields Określony w definicji sugestora. Jest to lista co najmniej jednego pola w indeksie, które są źródłem zawartości pod kątem sugestii. Pola muszą być typu Edm.String. Jeśli analizator jest określony w polu, musi być nazwanym analizatorem leksykalnym z tej listy (a nie analizatorem niestandardowym).

Najlepszym rozwiązaniem jest określenie tylko tych pól, które nadają się do oczekiwanej i odpowiedniej odpowiedzi, niezależnie od tego, czy jest to ukończony ciąg na pasku wyszukiwania, czy na liście rozwijanej.

Nazwa hotelu jest dobrym kandydatem, ponieważ ma precyzję. Pełne pola, takie jak opisy i komentarze, są zbyt gęste. Podobnie powtarzające się pola, takie jak kategorie i tagi, są mniej skuteczne. W przykładach uwzględniamy mimo to "kategorię", aby pokazać, że można uwzględnić wiele pól.
searchMode Parametr tylko REST, ale także widoczny w portalu. Ten parametr nie jest dostępny w zestawie SDK platformy .NET. Wskazuje ona strategię używaną do wyszukiwania fraz kandydatów. Jedynym obecnie obsługiwanym trybem jest analyzingInfixMatching, który obecnie jest zgodny na początku terminu.

Korzystanie z sugestora

Sugestor jest używany w zapytaniu. Po utworzeniu sugestora wywołaj jeden z następujących interfejsów API w celu uzyskania środowiska wyszukiwania zgodnie z rzeczywistym typem:

W aplikacji wyszukiwania kod klienta powinien używać biblioteki, takiej jak autouzupełnianie interfejsu użytkownika jQuery, aby zebrać zapytanie częściowe i podać dopasowanie. Aby uzyskać więcej informacji na temat tego zadania, zobacz Dodawanie autouzupełniania lub sugerowanych wyników do kodu klienta.

Użycie interfejsu API przedstawiono w poniższym wywołaniu interfejsu API REST autouzupełniania. W tym przykładzie istnieją dwa wnioski na wynos. Najpierw, podobnie jak w przypadku wszystkich zapytań, operacja jest wykonywana względem kolekcji dokumentów indeksu, a zapytanie zawiera search parametr, który w tym przypadku udostępnia zapytanie częściowe. Po drugie, należy dodać suggesterName do żądania. Jeśli sugestor nie jest zdefiniowany w indeksie, wywołania autouzupełniania lub sugestie kończą się niepowodzeniem.

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

Przykładowy kod

Następne kroki

Dowiedz się więcej o formułowaniu żądań\.