Konfigurowanie sugestora pod kątem autouzupełniania i sugestii w zapytaniu
W usłudze Azure AI Search typahead lub "search-as-you-type" jest włączona przy użyciu sugestora. Sugestor to konfiguracja w indeksie, która określa, które pola mają być używane do wypełniania autouzupełniania i sugerowanych dopasowań. 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 city
pole z wartością Seattle zawiera kombinacje prefiksów morza, siedzenia, siedzenia i siedzenia, 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.
Środowiska typeahead w usłudze Azure AI Search
Typahead może używać autouzupełniania, który 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 tw w. Sugestie to mini wyniki wyszukiwania, w których pole, takie jak hotel name
reprezentuje pasujący dokument wyszukiwania w hotelu z indeksu. W przypadku sugestii można wyświetlić dowolne pole zawierające opisowe informacje.
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 temacie Używanie sugestora.
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ślonego indeksu, a odpowiedzi są zwracane po udostępnieniu przez użytkownika co najmniej trzyznakowego 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 pola Miasto w obszarze Adres), uwzględnij element nadrzędny w ścieżce pola:
"Address/City"
(REST, 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 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 Aktualizowanie lub ponowne kompilowanie indeksu w usłudze 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 select
poleceń , , top
filter
isearchFields
, 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 łącznika, takiego jak kontekst, używając analizatora języka, wyniki są następujące kombinacje tokenów: kontekst, poufny, kontekstowy. 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 wynikam.
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. Dzięki temu jeden z pól może mieć sugestor, a drugi można skonfigurować przy użyciu niestandardowej konfiguracji analizatora.
Tworzenie za pomocą witryny Azure Portal
W przypadku korzystania z kreatora Dodawania indeksu lub Importowanie danych w celu utworzenia indeksu można włączyć sugestor:
W definicji indeksu wprowadź nazwę sugestora.
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 przy użyciu polecenia Utwórz indeks lub Zaktualizuj 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 wymienionym w Struct LexicalAnalyzerName (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:
- Sugerowanie interfejsu API REST
- Autouzupełnianie interfejsu API REST
- SuggestAsync, metoda
- AutocompleteAsync, metoda
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=2024-07-01
{
"search": "minecraf",
"suggesterName": "sg"
}
Przykładowy kod
Aby dowiedzieć się, jak używać pakietu sugestii typu open source w celu częściowego ukończenia terminu w aplikacji klienckiej, zobacz Eksplorowanie kodu wyszukiwania platformy .NET.
Następny krok
Dowiedz się więcej o formułowaniu żądań.