Javaslattevő konfigurálása automatikus kiegészítéshez és javasolt egyezésekhez egy lekérdezésben

Az Azure AI Searchben a typeahead (automatikus kiegészítés) vagy az "öntípusos keresés" engedélyezve van egy javaslattevőn keresztül. A javaslattevő egy index konfigurációja, amely meghatározza, hogy mely mezőket kell használni az automatikus kiegészítés és javaslatok feltöltéséhez. Ezek a mezők extra tokenizáláson mennek keresztül, és előtagsorozatokat hoznak létre, amelyek támogatják a részleges feltételekkel való egyezéseket. Például egy "Seattle" értékkel rendelkező City mezőt tartalmazó javaslattevő előtagjai a "tenger", az "ülés", a "seatt" és a "seattl" előtagot tartalmazzák a typeahead támogatásához.

A részleges kifejezések egyezései lehetnek automatikusan kitöltött lekérdezések vagy javasolt egyezések. Ugyanaz a javaslattevő mindkét élményt támogatja.

A Typeahead lehet automatikus kiegészítés, amely egy teljes kifejezés lekérdezésének részleges bemenetét, illetve az adott egyezésre kattintást meghívó javaslatokat hajtja végre. Az automatikus kiegészítés létrehoz egy lekérdezést. A javaslatok egyező dokumentumot hoznak létre.

Az alábbi képernyőkép mindkettőt szemlélteti. Az automatikus kiegészítés egy lehetséges kifejezésre számít, és a "tw" kifejezés "in" kifejezéssel fejeződik be. A javaslatok a mini keresési eredmények, ahol egy mező, például a szálloda neve egy megfelelő szállodai keresési dokumentumot jelöl az indexből. Javaslatok esetén bármely olyan mezőt felszínre helyezhet, amely leíró információkat tartalmaz.

Visual comparison of autocomplete and suggested queries

Ezeket a funkciókat külön vagy együtt is használhatja. Ezeknek a viselkedéseknek az Azure AI Searchben való implementálásához van egy index- és lekérdezésösszetevő.

  • Javaslattevő hozzáadása keresési index definícióhoz. A cikk további része egy javaslattevő létrehozására összpontosít.

  • Javaslattevő-kompatibilis lekérdezés meghívása javaslatkérés vagy automatikus kiegészítési kérelem formájában a későbbi szakaszban felsorolt API-k egyikével.

A sztringmezők esetében a keresés mezőnként engedélyezve van. Mindkét típusfej viselkedést implementálhatja ugyanazon a keresési megoldáson belül, ha a képernyőképen láthatóhoz hasonló élményt szeretne. Mindkét kérés egy adott index dokumentumgyűjteményét célozza, és a válaszok akkor lesznek visszaadva, ha egy felhasználó legalább három karakteres beviteli sztringet ad meg.

Javaslattevő létrehozása

Javaslattevő létrehozásához adjon hozzá egyet egy indexdefinícióhoz. A javaslattevők olyan nevet és mezők gyűjteményét használják, amelyeken engedélyezve van a típusfejléc használata. A javaslattevők létrehozásának legjobb módja az, ha azt a mezőt is definiálja, amely azt használja.

  • Csak sztringmezőket használjon.

  • Ha a sztringmező egy összetett típus része (például egy Címen belüli Város mező), adja meg a szülőt a mező elérési útjában: "Address/City" (REST és C# és Python) vagy ["Address"]["City"] (JavaScript).

  • Használja az alapértelmezett standard Lucene-elemzőt ("analyzer": null) vagy egy nyelvelemzőt (például "analyzer": "en.Microsoft") a mezőben.

Ha már meglévő mezők használatával próbál javaslattevőt létrehozni, az API letiltja azt. Az előtagok az indexelés során jönnek létre, amikor két vagy több karakterkombináció részleges kifejezései a teljes kifejezések mellett jogkivonatosak. Mivel a meglévő mezők már jogkivonatosak, újra kell építenie az indexet, ha hozzá szeretné adni őket egy javaslattevőhöz. További információ: Azure AI Search-index újraépítése.

Mezők kiválasztása

Bár a javaslattevő számos tulajdonsággal rendelkezik, elsősorban sztringmezők gyűjteménye, amelyekhez ön által használt keresési felületet engedélyez. Minden indexhez egy javaslatot kell tenni, ezért a javaslattevők listájának tartalmaznia kell az összes olyan mezőt, amely tartalommal járul hozzá mind a javaslatokhoz, mind az automatikus kiegészítéshez.

Az automatikus kiegészítés előnye, hogy egy nagyobb mezőkészletből kell kiindulni, mert a további tartalom több kifejezéskimeneti potenciállal rendelkezik.

A javaslatok viszont jobb eredményeket eredményeznek, ha a mezőválasztás szelektív. Ne feledje, hogy a javaslat egy keresési dokumentum proxyja, ezért válasszon olyan mezőket, amelyek a legjobban egy találatot jelölnek. A több egyezést megkülönböztető nevek, címek vagy egyéb egyedi mezők a legjobban működnek. Ha a mezők ismétlődő értékekből állnak, a javaslatok azonos eredményekből állnak, és a felhasználó nem tudja, melyiket válassza.

Ha a kereséssel kapcsolatos szolgáltatásokat is szeretné kielégíteni, adja hozzá az automatikus kiegészítéshez szükséges összes mezőt, majd használja selecta , topmajd filtera javaslatokat, és searchFields szabályozza a találatokat.

Elemzők kiválasztása

Az elemző kiválasztása határozza meg a mezők tokenizálásának és előtagjának módját. Például egy kötőjeles sztring, például a "környezetérzékeny" esetében a nyelvelemző használata a következő jogkivonat-kombinációkat eredményezi: "context", "sensitive", "context-sensitive". Ha a standard Lucene-elemzőt használta volna, az elválasztott sztring nem létezne.

Az elemzők kiértékelésekor fontolja meg az Analyze Text API használatát a kifejezések feldolgozásának elemzéséhez. Miután létrehoz egy indexet, kipróbálhat különböző elemzőket egy sztringen a jogkivonat kimenetének megtekintéséhez.

Az egyéni elemzőket vagy beépített elemzőket használó mezők (a standard Lucene kivételével) kifejezetten nem engedélyezettek a gyenge eredmények elkerülése érdekében.

Feljegyzés

Ha az elemzők kényszere körül kell dolgoznia, például ha egy kulcsszó- vagy ngramelemzőre van szüksége bizonyos lekérdezési forgatókönyvekhez, két külön mezőt kell használnia ugyanahhoz a tartalomhoz. Ez lehetővé teszi, hogy az egyik mező rendelkezzen javaslattevővel, a másik pedig egyéni elemzőkonfigurációval.

Létrehozás a portál használatával

Amikor indexet hoz létre az Index hozzáadása vagy az Adatok importálása varázslóval, engedélyezheti a javaslattevőt:

  1. Az indexdefinícióban adja meg a javaslattevő nevét.

  2. Az új mezők egyes meződefinícióiban jelölje be a Jelölőnégyzet jelölőnégyzetet a Javaslattevő oszlopban. A jelölőnégyzet csak sztringmezőkön érhető el.

Ahogy korábban már említettük, az elemző választása hatással van a tokenizálásra és az előtagolásra. A javaslattevők engedélyezésekor vegye figyelembe a teljes meződefiníciót.

Létrehozás REST használatával

A REST API-ban adjon hozzá javaslattevőket az Index létrehozása vagy az Index frissítése szolgáltatással.

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

Létrehozás a .NET használatával

A C#-ban definiáljon egy SearchSuggester objektumot. Suggesters Egy SearchIndex-objektum gyűjteménye, de csak egy elemet vehet igénybe. Adjon hozzá egy javaslatot az indexdefinícióhoz.

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

Tulajdonsághivatkozás

Tulajdonság Leírás
név A javaslattevő definíciójában van megadva, de automatikus kiegészítési vagy javaslatkérést is kért.
sourceFields A javaslattevő definíciójában van megadva. Ez az index egy vagy több olyan mezőjének listája, amely a tartalom forrása a javaslatokhoz. A mezőknek típusnak Edm.Stringkell lenniük. Ha egy elemző van megadva a mezőben, akkor a listából származó névvel ellátott lexikális elemzőnek kell lennie (nem egyéni elemzőnek).

Ajánlott eljárásként csak azokat a mezőket adja meg, amelyek a várt és megfelelő választ adják meg, függetlenül attól, hogy egy keresősávban vagy egy legördülő listában befejezett sztringről van-e szó.

A szálloda neve jó jelölt, mert precizitással rendelkezik. A részletes mezők, például a leírások és a megjegyzések túl sűrűek. Hasonlóképpen az ismétlődő mezők, például kategóriák és címkék kevésbé hatékonyak. A példákban a "kategória" is szerepel, hogy bemutassuk, hogy több mezőt is megadhat.
searchMode CSAK REST paraméter, de a portálon is látható. Ez a paraméter nem érhető el a .NET SDK-ban. A jelölt kifejezések keresésére használt stratégiát jelzi. Jelenleg csak az analyzingInfixMatchinga mód támogatott, amely jelenleg egy kifejezés elején egyezik.

Javaslattevő használata

A rendszer egy javaslattevőt használ egy lekérdezésben. A javaslattevő létrehozása után hívja meg az alábbi API-k egyikét, hogy ön által használt keresési élményt nyújtsunk:

Egy keresőalkalmazásban az ügyfélkódnak egy olyan kódtárat kell használnia, mint a jQuery felhasználói felület automatikus kiegészítése a részleges lekérdezés összegyűjtéséhez és az egyezés megadásához. A feladatról további információt az Automatikus kiegészítés vagy javasolt eredmények hozzáadása az ügyfélkódhoz című témakörben talál.

Az API-használatot az automatikus kiegészítési REST API következő hívása szemlélteti. Ebből a példából két lehetőség van. Először is, mint minden lekérdezés esetében, a művelet egy index dokumentumgyűjteményén van, és a lekérdezés tartalmaz egy paramétert search , amely ebben az esetben a részleges lekérdezést biztosítja. Másodszor, hozzá kell adnia suggesterName a kéréshez. Ha egy javaslattevő nincs definiálva az indexben, az automatikus kiegészítésre irányuló hívások vagy javaslatok sikertelenek.

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

Mintakód

Következő lépések

További információ a kérésekről\ megfogalmazás.