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

Ve službě Azure AI Search je funkce typeahead (autocomplete) nebo "search-as-you-type" povolená prostřednictvím navrhovače. Navrhovač je konfigurace v indexu určující, která pole se mají použít k naplnění automatického dokončování a návrhů. 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 pole Město s hodnotou "Seattle", bude mít kombinace předpon "sea", "seat", "seatt" 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 bý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 dokončení "tw" "in". Návrhy jsou mini výsledky hledání, kde pole, jako je název hotelu, představuje odpovídající vyhledávací dokument hotelu z indexu. V případě návrhů můžete zobrazit libovolné pole, které poskytuje popisné informace.

Visual comparison of autocomplete and suggested queries

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.

  • Pomocí některého z rozhraní API uvedených v další části volejte dotaz s podporou návrhy ve formě žádosti o návrh nebo automatického dokončování.

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ů konkrétního indexu a odpovědí, jakmile uživatel poskytne alespoň třímísmenný 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 a 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ředem existují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 Postup opětovného sestavení indexu 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 u řetězce s dělením slov, jako je "kontextově citlivý", výsledkem použití analyzátoru jazyka jsou tyto kombinace tokenů: "context", "sensitive", "context-sensitive". 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žní, aby jedno z polí mělo navrhovač, zatímco druhá se dá nastavit pomocí vlastní konfigurace analyzátoru.

Vytvoření pomocí portálu

Pokud k vytvoření indexu použijete Průvodce přidáním indexunebo 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 návrhy prostřednictvím 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 z tohoto seznamu (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 jsme přesto zahrnuli "category", abychom ukázali, ž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=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Ukázkový kód

Další kroky

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