Přidat návrhy automatického dokončování a vyhledávání v klientských aplikacích

Note

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Vyhledávání při psaní je běžnou technikou pro zlepšení produktivity dotazů. Ve službě Azure AI Vyhledávač je toto prostředí podporováno prostřednictvím automatického dokončování, které dokončí termín nebo frázi na základě částečného vstupu (například dokončení mikročipu pomocí mikročipu, mikroskopu, microsoftu a dalších mikroshod). Druhým uživatelským prostředím je návrhy, které vytvoří krátký seznam odpovídajících dokumentů (například vrácení názvů knih s ID, abyste mohli vytvořit odkaz na stránku podrobností o této knize). Automatické doplňování i doporučení jsou založené na shodě v indexu. Služba nenabízí automaticky kompilované dotazy ani návrhy, které vracejí nulové výsledky.

Zavedení těchto zkušeností v Azure AI Vyhledávač:

  • Přidat suggester do schématu indexu.
  • Vytvořte dotaz, který v požadavku volá rozhraní API pro automatické dokončování nebo rozhraní API pro návrhy.
  • Přidejte ovládací prvek uživatelského rozhraní pro zpracování interakcí s hledáním při psaní v klientské aplikaci. Pro tento účel doporučujeme použít existující javascriptovou knihovnu.

Ve službě Azure AI Vyhledávač se automaticky kompilované dotazy a navrhované výsledky načtou z indexu vyhledávání z vybraných polí, která zaregistrujete u navrhovače. Navrhovač je součástí indexu a určuje, která pole poskytují obsah, který buď dokončí dotaz, navrhne výsledek nebo obojí. Při vytvoření a načtení indexu se interně vytvoří datová struktura pro návrhy pro ukládání předpon používaných pro párování u částečných dotazů. Pro zkušenosti je nezbytné zvolit vhodná pole, která jsou jedinečná nebo alespoň neopakovatelná. Další informace najdete v tématu Konfigurace navrhovače.

Zbývající část tohoto článku se zaměřuje na dotazy a kód klienta. K ilustraci klíčových bodů používá JavaScript a C#. Příklady rozhraní REST API slouží ke stručné prezentaci jednotlivých operací. Kompletní ukázky kódu najdete v tématu Přidání vyhledávání na web pomocí .NET.

Nastavení žádosti

Mezi prvky požadavku patří jedno z rozhraní API pro vyhledávání při psaní, částečný dotaz a navrhovač. Následující skript znázorňuje komponenty požadavku pomocí rozhraní REST API pro automatické dokončování jako příklad.

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

Parametr suggesterName poskytuje pole zaměřená na návrhy, která se používají k doplnění termínů nebo návrhů. V případě návrhů by se měl seznam polí skládat z návrhů, které nabízejí jasné volby mezi odpovídajícími výsledky. Na webu, který prodává počítačové hry, může být pole označeno jako herní titul.

Parametr search poskytuje částečný dotaz, kde se znaky předávají do požadavku dotazu prostřednictvím ovládacího prvku jQuery Autocomplete. V předchozím příkladu je minecraf statickou ilustrací toho, co může ovládací prvek předat.

Rozhraní API neukládají minimální požadavky na délku částečného dotazu; může to být jen jeden znak. JQuery Autocomplete ale poskytuje minimální délku. Typické jsou minimálně dva nebo tři znaky.

Shody nastávají na začátku každého termínu ve vstupním řetězci. Vzhledem k rychlé hnědé lišce se jak automatické dokončování, tak návrhy shodují s částečnými verzemi the, quick, brown nebo fox, ale ne s částečnými termíny, jako je rown nebo ox. Kromě toho každá shoda nastaví rozsah pro následující rozšíření. Částečný dotaz na quick br odpovídá buď quick brown nebo quick bread, ale ani brown ani bread by samy o sobě nebyly shodou, pokud by jim nepředcházelo quick*.

Rozhraní API pro vyhledávání během psaní

Odkazy na rest a .NET SDK najdete na těchto odkazech:

Strukturování odpovědi

Odpovědi pro automatické dokončování a návrhy jsou to, co byste mohli očekávat pro vzor: Automatické dokončování vrátí seznam termínů, návrhy vrátí termíny a ID dokumentu, abyste mohli dokument načíst (pomocí rozhraní API pro vyhledávání dokumentů načíst konkrétní dokument pro stránku podrobností).

Odpovědi jsou formovány podle parametrů v žádosti:

  • Pro automatické dokončování nastavte autocompleteMode k určení, zda se text dokončuje na jednom nebo dvou termínech.

  • V případě návrhů nastavte $select tak, aby vracela pole obsahující jedinečná nebo různá hodnoty, jako jsou názvy a popisy. Vyhněte se polím, která obsahují duplicitní hodnoty (například kategorie nebo město).

Následující parametry platí pro automatické dokončování i návrhy, ale jsou vhodnější pro návrhy, zejména v případě, že navrhovač obsahuje více polí.

Parametr Využití
Vyhledávací pole Omezte dotaz na konkrétní pole.
$filter Použití kritérií shody u sady výsledků ($filter=Category eq 'ActionAdventure').
$top Omezte výsledky na konkrétní číslo ($top=5).

Přidání kódu interakce uživatele

Automatické vyplňování termínu dotazu nebo vyřazení seznamu odpovídajících odkazů vyžaduje kód interakce uživatele, obvykle JavaScript, který může využívat požadavky z externích zdrojů, jako jsou automatické dokončování nebo návrhy dotazů na index Služby Azure Search Cognitive.

I když byste tento kód mohli nativně napsat, je jednodušší používat funkce z existující javascriptové knihovny, například jednu z následujících možností.

Pomocí těchto knihoven v klientovi vytvořte vyhledávací pole, které podporuje návrhy i automatické dokončování. Vstupy shromážděné do vyhledávacího pole je pak možné spárovat s návrhy a akcemi automatického dokončování ve vyhledávací službě.

Návrhy

Tato část vás provede implementací navrhovaných výsledků počínaje definicí vyhledávacího pole. Ukazuje také, jak a skript, který vyvolá první knihovnu automatického dokončování JavaScriptu, na kterou odkazuje tento článek.

Za předpokladu použití knihovny jQuery UI Autocomplete a projektu MVC v jazyce C#, můžete definovat vyhledávací pole pomocí JavaScriptu ve souboru Index.cshtml. Knihovna přidá funkci vyhledávání průběžně při psaní do vyhledávacího pole tím, že provede asynchronní volání kontroleru MVC k načtení návrhů.

V souboru Index.cshtml ve složce \Views\Home může být řádek pro vytvoření vyhledávacího pole následující:

<input class="searchBox" type="text" id="searchbox1" placeholder="search">

Tento příklad je jednoduché vstupní textové pole s třídou pro stylování, ID, na které odkazuje JavaScript a zástupný text.

Do stejného souboru vložte JavaScript, který odkazuje na vyhledávací pole. Následující funkce volá rozhraní API pro návrhy, které požaduje navrhované odpovídající dokumenty na základě částečných vstupů termínů:

$(function () {
    $("#searchbox1").autocomplete({
        source: "/home/suggest?highlights=false&fuzzy=false&",
        minLength: 3,
        position: {
            my: "left top",
            at: "left-23 bottom+10"
        }
    });
});

Funkce Autocomplete uživatelského rozhraní jQuery source určuje, odkud získat seznam položek k zobrazení pod vyhledávacím polem. Vzhledem k tomu, že se jedná o projekt MVC, volá Suggest funkci v HomeController.cs , která obsahuje logiku pro vracení návrhů dotazů. Tato funkce také předává několik parametrů pro řízení zvýraznění, přibližných shod a termínů. Rozhraní Rozhraní JavaScript API pro automatické dokončování přidá parametr term.

minLength: 3 zajišťuje, aby se doporučení zobrazovala pouze v případech, kdy jsou ve vyhledávacím poli alespoň tři znaky.

Povolení přibližné shody

Vyhledávání přibližných shod umožňuje získat výsledky na základě blízké shody i v případě, že uživatel ve vyhledávacím poli udělá chybu ve slově. Vzdálenost úprav je 1, což znamená, že mezi uživatelským vstupem a shodou může být maximální rozdíl jednoho znaku.

source: "/home/suggest?highlights=false&fuzzy=true&",

Povolení zvýraznění

Zvýraznění aplikuje styl písma na znaky v textu výsledku, které odpovídají zadanému vstupu. Pokud je například částečný vstup mikro, výsledek se zobrazí jako Microsoft, mikroskop, atd. Zvýraznění je založeno na parametrech HighlightPreTag a HighlightPostTag, které jsou definovány v souladu s funkcí Suggest.

source: "/home/suggest?highlights=true&fuzzy=true&",

Návrh funkce

Pokud používáte C# a aplikaci MVC, soubor HomeController.cs v adresáři Controllers je místo, kde můžete vytvořit třídu pro navrhované výsledky. V .NET Suggest je funkce založená na metodě SuggestAsync. Další informace o sadě .NET SDK naleznete v tématu Použití služby Azure AI Vyhledávač z aplikace .NET.

Tato InitSearch metoda vytvoří ověřeného klienta indexu HTTP pro Search Azure AI. Vlastnosti třídy SuggestOptions určují, která pole jsou prohledána a vrácena ve výsledcích, počet shod a zda je použita přibližná shoda.

U automatického dokončování je přibližné porovnávání omezeno na jednu vzdálenost úprav (jeden vynechaný nebo chybně umístěný znak). Neurčité shody v dotazech automatického dokončování můžou někdy vést k neočekávaným výsledkům v závislosti na velikosti indexu a způsobu dělení na shardy.

public async Task<ActionResult> SuggestAsync(bool highlights, bool fuzzy, string term)
{
    InitSearch();

    var options = new SuggestOptions()
    {
        UseFuzzyMatching = fuzzy,
        Size = 8,
    };

    if (highlights)
    {
        options.HighlightPreTag = "<b>";
        options.HighlightPostTag = "</b>";
    }

    // Only one suggester can be specified per index.
    // The suggester for the Hotels index enables autocomplete/suggestions on the HotelName field only.
    // During indexing, HotelNames are indexed in patterns that support autocomplete and suggested results.
    var suggestResult = await _searchClient.SuggestAsync<Hotel>(term, "sg", options).ConfigureAwait(false);

    // Convert the suggest query results to a list that can be displayed in the client.
    List<string> suggestions = suggestResult.Value.Results.Select(x => x.Text).ToList();

    // Return the list of suggestions.
    return new JsonResult(suggestions);
}

Funkce SuggestAsync má dva parametry, které určují, zda se spolu s hledaným termínem použijí zvýrazněné hity nebo se uplatní přibližné shody. Do navrhovaných výsledků je možné zahrnout až osm shod. Metoda vytvoří objekt SuggestOptions, který se pak předá rozhraní Suggest API. Výsledek se pak převede do formátu JSON, aby ho bylo možné zobrazit v klientovi.

Automatické dokončování

Zatím se kód uživatelského rozhraní vyhledávání zaměřil na návrhy. Další blok kódu zobrazuje automatické dokončování pomocí funkce XDSoft jQuery UI Autocomplete a předává požadavek na automatické dokončování Azure AI Vyhledávač. Stejně jako u návrhů v aplikaci C#, kód podporující interakci uživatelů se umisťuje do index.cshtml.

$(function () {
    // using modified jQuery Autocomplete plugin v1.2.8 https://xdsoft.net/jqplugins/autocomplete/
    // $.autocomplete -> $.autocompleteInline
    $("#searchbox1").autocompleteInline({
        appendMethod: "replace",
        source: [
            function (text, add) {
                if (!text) {
                    return;
                }

                $.getJSON("/home/autocomplete?term=" + text, function (data) {
                    if (data && data.length > 0) {
                        currentSuggestion2 = data[0];
                        add(data);
                    }
                });
            }
        ]
    });

    // complete on TAB and clear on ESC
    $("#searchbox1").keydown(function (evt) {
        if (evt.keyCode === 9 /* TAB */ && currentSuggestion2) {
            $("#searchbox1").val(currentSuggestion2);
            return false;
        } else if (evt.keyCode === 27 /* ESC */) {
            currentSuggestion2 = "";
            $("#searchbox1").val("");
        }
    });
});

Funkce Automatické dokončování

Automatické dokončování je založené na metodě AutocompleteAsync. Stejně jako u návrhů by tento blok kódu šel do souboru HomeController.cs .

public async Task<ActionResult> AutoCompleteAsync(string term)
{
    InitSearch();

    // Setup the autocomplete parameters.
    var ap = new AutocompleteOptions()
    {
        Mode = AutocompleteMode.OneTermWithContext,
        Size = 6
    };
    var autocompleteResult = await _searchClient.AutocompleteAsync(term, "sg", ap).ConfigureAwait(false);

    // Convert the autocompleteResult results to a list that can be displayed in the client.
    List<string> autocomplete = autocompleteResult.Value.Results.Select(x => x.Text).ToList();

    return new JsonResult(autocomplete);
}

Funkce automatického dokončování přebírá vstup hledaného termínu. Metoda vytvoří AutoCompleteParameters objektu. Výsledek se pak převede do formátu JSON, aby ho bylo možné zobrazit v klientovi.

Další krok

Následující návod demonstruje zážitek vyhledávání během psaní.