Share via


Automatikus kiegészítési és keresési javaslatok hozzáadása az ügyfélalkalmazásokban

A keresési mód használata gyakori módszer a lekérdezési hatékonyság javítására. Az Azure AI Searchben ezt az élményt az automatikus kiegészítés támogatja, amely részleges bemeneten alapuló kifejezést vagy kifejezést fejez be (a "mikro" kitöltése "microchip", "microscope", "microsoft" és bármely más mikro egyezéssel). A második felhasználói felület a javaslatok, vagy az egyező dokumentumok rövid listája (a könyvcímek azonosítóval való visszaadása, hogy a könyv részletes oldalára hivatkozhassunk). Az automatikus kiegészítés és a javaslatok is az indexben lévő egyezésre vannak predikálva. A szolgáltatás nem kínál automatikusan befejezett lekérdezéseket vagy javaslatokat, amelyek nulla eredményt adnak vissza.

A következő szolgáltatások megvalósítása az Azure AI Searchben:

  • Adjon hozzá egy suggester indexsémát.
  • Hozzon létre egy lekérdezést, amely meghívja az Automatikus kiegészítés vagy a Javaslatok API-t a kéréshez.
  • Adjon hozzá egy felhasználói felületi vezérlőt az ügyfélalkalmazásban történő kereséssel kapcsolatos interakciók kezeléséhez. Erre a célra egy meglévő JavaScript-kódtár használatát javasoljuk.

Az Azure AI Searchben a rendszer lekéri az automatikusan kitöltött lekérdezéseket és a javasolt eredményeket a keresési indexből, a javasolt mezőkből. A javaslattevő az index része, és meghatározza, hogy mely mezők nyújtanak olyan tartalmat, amely befejez egy lekérdezést, javasol egy eredményt, vagy mindkettőt. Az index létrehozása és betöltésekor a rendszer belsőleg létrehoz egy javaslattevő adatstruktúrát, amely a részleges lekérdezéseken való egyeztetéshez használt előtagokat tárolja. A javaslatokhoz elengedhetetlen a megfelelő mezők kiválasztása, amelyek egyediek, vagy legalábbis nem ismétlődőek. További információ: Javaslattevő létrehozása.

A cikk további része a lekérdezésekre és az ügyfélkódra összpontosít. JavaScript és C# használatával szemlélteti a főbb pontokat. A REST API-példák az egyes műveletek tömör bemutatására szolgálnak. A végpontok közötti kódmintákat a következő lépésekben találja.

Kérés beállítása

A kérések elemei közé tartozik az ön által megadott keresési API-k egyike, egy részleges lekérdezés és egy javaslattevő. Az alábbi szkript egy kérés összetevőit mutatja be, példaként az Automatikus kiegészítés REST API-t használva.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2020-06-30
{
  "search": "minecraf",
  "suggesterName": "sg"
}

A "suggesterName" a kifejezések vagy javaslatok kiegészítéséhez használt javaslattevői mezőket adja meg. Különösen a javaslatok esetében a mezőlistának olyan elemekből kell állnia, amelyek világos választási lehetőségeket kínálnak az egyező eredmények között. Egy számítógépes játékokat értékesítő webhelyen a mező lehet a játék címe.

A "keresés" paraméter a részleges lekérdezést adja meg, ahol a jQuery Automatikus kiegészítés vezérlőn keresztül a rendszer karaktereket táplál a lekérdezési kérelemhez. A fenti példában a "minecraf" statikus illusztráció, amely azt szemlélteti, hogy a vezérlő mit adhat át.

Az API-k nem írnak elő minimális hosszkövetelményeket a részleges lekérdezésre; lehet akár egy karakter is. A jQuery Autocomplete azonban minimális hosszt biztosít. Legalább két vagy három karakter jellemző.

Az egyezések a kifejezés elején találhatók, bárhol a bemeneti sztringben. Tekintettel a "gyors barna róka" kifejezésre, az automatikus kiegészítés és a javaslatok megegyeznek a "the", a "quick", a "brown" vagy a "fox" részleges verzióival, de nem a részleges infix kifejezéseken, mint a "rown" vagy az "ökör". Ezenkívül minden egyezés meghatározza az alsóbb rétegbeli bővítés hatókörét. A "quick br" részleges lekérdezése megegyezik a "gyors barna" vagy a "gyors kenyér" kifejezéssel, de a "barna" vagy a "kenyér" önmagában nem egyezik, hacsak a "gyors" nem előzi meg őket.

A kereséshez használt API-k

Kövesse az alábbi hivatkozásokat a REST és a .NET SDK referenciaoldalakhoz:

Válasz strukturálása

Az automatikus kiegészítésre és javaslatokra adott válaszok a minta alapján várhatók: Az automatikus kiegészítés visszaadja a kifejezések listáját, a Javaslatok kifejezéseket és egy dokumentumazonosítót, hogy lekérhesse a dokumentumot (a Dokumentum keresése API-val lekérheti az adott dokumentumot egy részletes laphoz).

A válaszokat a kérelem paraméterei határozzák meg:

  • Az Automatikus kiegészítés beállításnál állítsa be az automatikus kiegészítési módot annak meghatározásához, hogy a szövegkiegészítés egy vagy két kifejezésen történik-e.

  • Javaslatok esetén állítsa be a $select olyan mezők visszaadására, amelyek egyedi vagy megkülönböztető értékeket, például neveket és leírásokat tartalmaznak. Kerülje az ismétlődő értékeket (például kategória vagy város) tartalmazó mezőket.

Az alábbi paraméterek az automatikus kiegészítésre és a javaslatokra is érvényesek, de jobban alkalmazhatók a javaslatokra, különösen akkor, ha egy javaslattevő több mezőt is tartalmaz.

Paraméter Használat
searchFields Korlátozza a lekérdezést adott mezőkre.
$filter Egyezési feltételek alkalmazása az eredményhalmazra ($filter=Category eq 'ActionAdventure').
$top Korlátozza az eredményeket egy adott számra ($top=5).

Felhasználói beavatkozási kód hozzáadása

A lekérdezési kifejezés automatikus kitöltéséhez vagy az egyező hivatkozások listájának eltávolításához olyan felhasználói interakciós kódra van szükség, amely általában JavaScript, amely felhasználhatja a külső forrásokból érkező kéréseket, például automatikus kiegészítést vagy javaslatlekérdezéseket egy Azure Search Cognitive-indexen.

Bár ezt a kódot natív módon is megírhatja, a meglévő JavaScript-kódtárból egyszerűbben használhat függvényeket, például az alábbiak egyikét.

  • Az automatikus kiegészítési widget (jQuery UI) megjelenik a Javaslat kódrészletben. Létrehozhat egy keresőmezőt, majd hivatkozhat rá egy JavaScript-függvényben, amely az Automatikus kiegészítés widgetet használja. A vezérlő tulajdonságai beállítják a forrást (automatikus kiegészítés vagy javaslatfüggvény), a művelet végrehajtása előtt a bemeneti karakterek minimális hosszát és a helymeghatározást.

  • Az XDSoft Automatikus kiegészítés beépülő modul megjelenik az Automatikus kiegészítés kódrészletben.

  • javaslatok jelennek meg a JavaScript-oktatóanyagban és a kódmintában.

Az ügyfél ezen kódtáraival létrehozhat egy olyan keresőmezőt, amely támogatja a javaslatokat és az automatikus kiegészítést is. A keresőmezőben gyűjtött bemenetek ezután párosíthatók javaslatokkal és automatikus kiegészítési műveletekkel a keresési szolgáltatásban.

Javaslatok

Ez a szakasz végigvezeti a javasolt eredmények megvalósításán, kezdve a keresőmező definíciójával. Azt is bemutatja, hogyan és hogyan hívja meg a cikkben hivatkozott első JavaScript automatikus kiegészítési kódtárat.

Feltételezve, hogy a jQuery UI Autocomplete könyvtár és egy C#-beli MVC-projekt, a keresőmezőt JavaScript használatával definiálhatja az Index.cshtml fájlban. A kódtár a keresési típus szerinti interakciót hozzáadja a keresőmezőhöz úgy, hogy aszinkron hívásokat intéz az MVC-vezérlőhöz a javaslatok lekéréséhez.

Az Index.cshtml mappában a \Views\Home mappában a keresőmező létrehozásához a következő sor lehet:

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

Ez a példa egy egyszerű beviteli szövegdoboz, amelyen egy stílusosztály, egy JavaScript által hivatkozandó azonosító és helyőrző szöveg található.

Ugyanabban a fájlban ágyazza be a keresőmezőre hivatkozó JavaScriptet. Az alábbi függvény meghívja a Javaslat API-t, amely részleges kifejezésbemenetek alapján kéri a javasolt egyező dokumentumok megadását:

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

A source jQuery felhasználói felület automatikus kiegészítési függvénye a keresőmező alatt megjelenítendő elemek listáját jeleníti meg. Mivel ez a projekt egy MVC-projekt, meghívja a Javaslat függvényt HomeController.cs, amely tartalmazza a lekérdezési javaslatok visszaadásának logikáját. Ez a függvény néhány paramétert is átad a kiemelések, a homályos egyezés és a kifejezés szabályozásához. A JavaScript API automatikus kiegészítésével hozzáadja a kifejezésparamétert.

Ez minLength: 3 biztosítja, hogy a javaslatok csak akkor jelenjenek meg, ha legalább három karakter szerepel a keresőmezőben.

Homályos egyezés engedélyezése

Az intelligens kereséssel akkor is lekérheti az eredményeket közeli találatok alapján, ha a felhasználó elírt egy szót a keresőmezőben. A szerkesztési távolság 1, ami azt jelenti, hogy egy karakter maximális eltérése lehet a felhasználói bemenet és az egyezés között.

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

Kiemelés engedélyezése

A kiemelés betűstílust alkalmaz az eredményben szereplő karakterekre, amelyek megfelelnek a bemenetnek. Ha például a részleges bemenet "mikro", az eredmény mikrolágyítóként, mikrohatókörként és így tovább jelenik meg. A kiemelés a HighlightPreTag és a HighlightPostTag paramétereken alapul, a Javaslat függvénnyel beágyazottan definiálva.

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

Javaslat függvény

Ha C# és MVC-alkalmazást használ, HomeController.cs a Controllers könyvtárban található fájlban létrehozhat egy osztályt a javasolt eredményekhez. A .NET-ben a Javaslat függvény a SuggestAsync metóduson alapul. A .NET SDK-val kapcsolatos további információkért lásd : Az Azure AI Search használata .NET-alkalmazásból.

A InitSearch metódus létrehoz egy hitelesített HTTP-indexügyfélt az Azure AI-Search szolgáltatás. A SuggestOptions osztály tulajdonságai határozzák meg, hogy mely mezőket keresik és adják vissza az eredményekben, az egyezések számát, és hogy a rendszer használ-e homályos egyezést.

Az automatikus kiegészítés esetében a homályos egyezés egy szerkesztési távolságra korlátozódik (egy kihagyott vagy téves helyű karakterre). Az automatikus kiegészítési lekérdezések homályos egyeztetése néha váratlan eredményeket eredményezhet az index méretétől és a horizontális skálázástól függően.

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

A SuggestAsync függvény két paramétert használ, amelyek meghatározzák, hogy a rendszer visszaadja-e a találatkiemeléseket, vagy a keresési kifejezés bemenete mellett a rendszer homályos egyezést használ. Legfeljebb nyolc találat szerepelhet a javasolt eredmények között. A metódus létrehoz egy SuggestOptions objektumot, amelyet aztán átad a Javaslat API-nak. A rendszer az eredményt ezután JSON-kifejezéssé alakítja, hogy meg lehessen jeleníteni az ügyfélnek.

Automatikus

A keresési UX-kód eddig javaslatokra összpontosított. A következő kódblokk az automatikus kiegészítést jeleníti meg az XDSoft jQuery UI Automatikus kiegészítés funkcióval, amely az Azure AI Search automatikus kiegészítésére vonatkozó kérést adja át. A javaslatokhoz hasonlóan egy C#-alkalmazásban a felhasználói interakciót támogató kód az index.cshtml fájlban található.

$(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("");
        }
    });
});

Automatikus kiegészítés függvény

Az automatikus kiegészítés az AutocompleteAsync metóduson alapul. A javaslatokhoz hasonlóan ez a kódblokk is a HomeController.cs fájlba kerül.

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

Az Automatikus kiegészítés függvény a keresési kifejezés bemenetét használja. A metódus létrehoz egy AutoCompleteParameters objektumot. A rendszer az eredményt ezután JSON-kifejezéssé alakítja, hogy meg lehessen jeleníteni az ügyfélnek.

Következő lépések

Az alábbi oktatóanyag bemutatja az Ön által megadott típusú keresés élményét.