Konfigurace konfigurátoru pro automatické dokončování a návrhy v dotazu

Ve službě Azure AI Search je funkce typeahead nebo "search-as-you-type" povolená pomocí indikátoru. Návrh je konfigurace v indexu, která určuje, která pole se mají použít k naplnění automatického dokončování a navrhovaných shod. Tato pole procházejí extra tokenizací a generují sekvence předpon pro podporu shod v částečných termínech. Například navrhovač, který obsahuje city pole s hodnotou pro Seattle, má kombinace předpon moře, sedadla, sedadla a seattl pro podporu typeahead.

Shoda s částečnými termíny může být buď automaticky dokončený dotaz, nebo navrhovaná shoda. Stejný sugestivní modul podporuje obě prostředí.

Typeahead může použít automatické dokončování, které dokončí částečný vstup pro celý dotaz termínu nebo návrhy , které pozvou kliknutí na určitou shodu. Automatické dokončování vytvoří dotaz. Návrhy vytvoří odpovídající dokument.

Oba snímky obrazovky znázorňují následující snímek obrazovky. Automatické dokončování předpokládá potenciální termín a dokončuje tw s in. Návrhy jsou mini výsledky hledání, kde pole jako hotel name představuje odpovídající hotelový vyhledávací dokument z indexu. V případě návrhů můžete zobrazit libovolné pole, které poskytuje popisné informace.

Snímek obrazovky znázorňující vizuální porovnání automatického dokončování a navrhovaných dotazů

Tyto funkce můžete používat samostatně nebo společně. K implementaci těchto chování ve službě Azure AI Search existuje součást indexu a dotazu.

  • Přidejte do definice indexu vyhledávání návrhy. Zbývající část tohoto článku se zaměřuje na vytvoření navrhovače.

  • Volání dotazu s povoleným návrhy ve formě žádosti o návrh nebo automatického dokončování pomocí některého z rozhraní API uvedených v nástroji Pro návrhy

Pro pole řetězců je povoleno vyhledávání při psaní podle jednotlivých polí. Pokud chcete, aby prostředí podobné prostředí, které je uvedené na snímku obrazovky, můžete implementovat obě chování při psaní do stejného vyhledávacího řešení. Oba požadavky cílí na kolekci dokumentů určitého indexu a odpovědi se vrátí poté, co uživatel poskytne alespoň tříznakový vstupní řetězec.

Jak vytvořit navrhovač

Pokud chcete vytvořit navrhovač, přidejte ho do definice indexu. Navrhovač přebírá název a kolekci polí, u kterých je povolené prostředí pro psaní. Nejlepší čas k vytvoření navrhovače je, když definujete také pole, které ho používá.

  • Používejte pouze pole řetězců.

  • Pokud je pole řetězce součástí komplexního typu (například pole Město v rámci adresy), zahrňte do cesty k poli nadřazený prvek: "Address/City" (REST, C# a Python) nebo ["Address"]["City"] (JavaScript).

  • V poli použijte výchozí standardní analyzátor Lucene ("analyzer": null) nebo analyzátor jazyka (například "analyzer": "en.Microsoft").

Pokud se pokusíte vytvořit modul pro návrhy pomocí předexistujících polí, rozhraní API ho zakáže. Předpony se generují během indexování, pokud jsou částečné termíny ve dvou nebo více kombinacích znaků tokenizovány společně s celými termíny. Vzhledem k tomu, že existující pole jsou již tokenizována, je nutné znovu sestavit index, pokud je chcete přidat do sugestivního modulu. Další informace najdete v tématu Aktualizace nebo opětovné sestavení indexu ve službě Azure AI Search.

Zvolit pole

I když má navrhovač několik vlastností, jedná se primárně o kolekci řetězcových polí, pro která povolujete vyhledávání při psaní. Pro každý index existuje jeden souzenec, takže seznam svrhovačů musí obsahovat všechna pole, která přispívají obsahem pro návrhy i automatické dokončování.

Automatické dokončování přináší výhody z většího fondu polí, ze které můžete vybírat, protože další obsah má potenciál dokončení termínu.

Návrhy na druhou stranu generují lepší výsledky, když je výběr pole selektivní. Mějte na paměti, že návrh je proxy pro vyhledávací dokument, takže vyberte pole, která nejlépe představují jeden výsledek. Názvy, názvy nebo jiná jedinečná pole, která rozlišují mezi více shodami, fungují nejlépe. Pokud se pole skládají z opakujících se hodnot, návrhy se skládají z identických výsledků a uživatel nebude vědět, který z nich zvolit.

Pokud chcete splňovat možnosti hledání při psaní, přidejte všechna pole, která potřebujete pro automatické dokončování, ale pak použijte select, top, filtera searchFields k řízení výsledků pro návrhy.

Volba analyzátorů

Volba analyzátoru určuje, jak se pole tokenizují a mají předponu. Například v případě řetězce s dělením slov, jako je kontext, který se používá při použití analyzátoru jazyka, má za následek tyto kombinace tokenů: kontext, citlivý kontext a kontext. Kdybyste použili standardní analyzátor Lucene, řetězec dělení slov by neexistoval.

Při vyhodnocováníanalyzátorch Jakmile vytvoříte index, můžete zkusit různé analyzátory řetězce a zobrazit výstup tokenu.

Pole, která používají vlastní analyzátory nebo integrované analyzátory (s výjimkou standardních Lucene), jsou explicitně zakázána, aby se zabránilo špatným výsledkům.

Poznámka:

Pokud potřebujete obejít omezení analyzátoru, například pokud potřebujete analyzátor klíčových slov nebo ngramů pro určité scénáře dotazů, měli byste pro stejný obsah použít dvě samostatná pole. To umožňuje, aby jedno z polí mělo navrhovač, zatímco druhá se dá nastavit pomocí vlastní konfigurace analyzátoru.

Vytvoření s použitím webu Azure Portal

Pokud k vytvoření indexu použijete Průvodce přidáním indexu nebo importem dat , máte možnost povolit navrhovač:

  1. V definici indexu zadejte název pro navrhovač.

  2. V každé definici pole pro nová pole zaškrtněte políčko ve sloupci Návrhy . Zaškrtávací políčko je k dispozici pouze u řetězcových polí.

Jak jsme už uvedli, volba analyzátoru má vliv na tokenizaci a předponu. Při povolování navrhovačů zvažte celou definici pole.

Vytvoření pomocí REST

V rozhraní REST API přidejte moduly pro návrhy pomocí vytvoření indexu nebo aktualizace indexu.

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

Vytvoření pomocí .NET

V jazyce C# definujte objekt SearchSuggester. Suggesters je kolekce v objektu SearchIndex, ale může mít pouze jednu položku. Přidejte do definice indexu modul pro návrhy.

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

Referenční dokumentace k vlastnostem

Vlastnost Popis
name Zadané v definici souzence, ale také volal na požadavek automatického dokončování nebo návrhy.
sourceFields Zadané v definici souzence. Jedná se o seznam jednoho nebo více polí v indexu, která jsou zdrojem obsahu pro návrhy. Pole musí být typu Edm.String. Pokud je v poli zadán analyzátor, musí se jednat o pojmenovaný lexikální analyzátor uvedený ve struktuře LexicalAnalyzerName (ne vlastní analyzátor).

Osvědčeným postupem je zadat pouze pole, která se hodí k očekávané a vhodné odpovědi, ať už se jedná o dokončený řetězec na panelu hledání nebo v rozevíracím seznamu.

Název hotelu je dobrý kandidát, protože má přesnost. Podrobná pole, jako jsou popisy a komentáře, jsou příliš hustá. Podobně jsou opakující se pole, jako jsou kategorie a značky, méně efektivní. V příkladech přesto zahrneme kategorii , která vám ukáže, že můžete zahrnout více polí.
searchMode Parametr jen PRO REST, ale také viditelný na portálu. Tento parametr není k dispozici v sadě .NET SDK. Označuje strategii použitou k vyhledání kandidátských frází. Jediný aktuálně podporovaný režim je analyzingInfixMatching, který se aktuálně shoduje na začátku termínu.

Použití navrhovače

V dotazu se používá modul pro návrhy. Po vytvoření navrhovače zavolejte jedno z následujících rozhraní API pro vyhledávání při psaní:

Ve vyhledávací aplikaci by klientský kód měl použít knihovnu, jako je automatické dokončování uživatelského rozhraní jQuery, ke shromáždění částečného dotazu a poskytnutí shody. Další informace o této úloze najdete v tématu Přidání automatického dokončování nebo navrhovaných výsledků do kódu klienta.

Použití rozhraní API je znázorněno v následujícím volání rozhraní REST API automatického dokončování. V tomto příkladu existují dvě poznatky. Za prvé, stejně jako u všech dotazů, je operace proti kolekci dokumentů indexu a dotaz obsahuje search parametr, který v tomto případě poskytuje částečný dotaz. Za druhé, musíte do požadavku přidat suggesterName . Pokud není v indexu definován modul pro návrhy, volání automatického dokončování nebo návrhů selžou.

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

Ukázkový kód

Informace o použití balíčku Návrhy open source k částečnému dokončování termínů v klientské aplikaci najdete v tématu Prozkoumání kódu vyhledávání .NET.

Další krok

Přečtěte si další informace o formulaci žádosti.