Keresési eredmények használata az Azure AI Searchben

Ez a cikk bemutatja, hogyan használható lekérdezési válasz az Azure AI Searchben. A válasz struktúráját a lekérdezésben szereplő paraméterek határozzák meg, a Keresési dokumentumok (REST) vagy a SearchResults osztály (Azure for .NET) szerint.

A lekérdezés paraméterei a következőt határozzák meg:

  • Mező kijelölése
  • A lekérdezés indexében található egyezések száma
  • Lapozás eredményei
  • A válaszban szereplő eredmények száma (alapértelmezés szerint legfeljebb 50)
  • A rendezés iránya
  • Az eredményen belüli kifejezések kiemelése, egyezés a teljes vagy részleges kifejezésre a törzsben

Eredményösszeállítás

Az eredmények táblázatosak, az összes "lekérdezhető" mező mezőiből állnak, vagy csak a $select paraméterekben megadott mezőkre korlátozódnak. A sorok az egyező dokumentumok.

Kiválaszthatja, hogy mely mezők szerepelnek a keresési eredmények között. Bár a keresődokumentumok sok mezővel rendelkezhetnek, általában csak néhányra van szükség az egyes dokumentumok eredményben való megjelenítéséhez. Egy lekérdezési kérelemhez fűzze hozzá $select=<field list> , hogy megadja, mely "lekérhető" mezők jelenjenek meg a válaszban.

Válasszon olyan mezőket, amelyek kontrasztot és különbséget kínálnak a dokumentumok között, és elegendő információt nyújtanak ahhoz, hogy átkattintási választ hívjon meg a felhasználó részéről. Egy e-kereskedelmi webhelyen ez lehet egy terméknév, leírás, márka, szín, méret, ár és értékelés. A beépített szállodák mintául szolgáló index esetében a következő példában a "kiválasztás" mezők lehetnek:

POST /indexes/hotels-sample-index/docs/search?api-version=2020-06-30 
    {  
      "search": "sandy beaches",
      "select": "HotelId, HotelName, Description, Rating, Address/City"
      "count": true
    }

Feljegyzés

Az eredményekben szereplő képek, például egy termékkép vagy embléma esetében az Azure AI Searchen kívül tárolja őket, de adjon hozzá egy mezőt az indexben, hogy hivatkozzon a kép URL-címére a keresési dokumentumban. Az eredményekben képeket szemléltető mintaindexek közé tartozik a realestate-sample-us bemutató (egy beépített mintaadatkészlet, amelyet egyszerűen létrehozhat az Adatok importálása varázslóban) és a New York City Jobs bemutatóalkalmazás.

váratlan eredmények Tippek

Esetenként az anyag és nem az eredmények struktúrája váratlan. Előfordulhat például, hogy egyes találatok duplikáltnak tűnnek, vagy a felső rész közelében megjelenő találatok az eredményekben alacsonyabban vannak elhelyezve. Ha a lekérdezés eredménye váratlan, megpróbálhatja ezeket a lekérdezésmódosításokat, hogy lássa, javulnak-e az eredmények:

  • Módosítsa searchMode=any (alapértelmezés szerint) úgy, hogy searchMode=all a feltételek helyett az összes feltételre vonatkozó egyezéseket követeljen meg. Ez különösen igaz, ha logikai operátorok szerepelnek a lekérdezésben.

  • Kísérletezzen különböző lexikális elemzőkkel vagy egyéni elemzőkkel annak ellenőrzéséhez, hogy módosítja-e a lekérdezés eredményét. Az alapértelmezett elemző felbontja az elválasztott szavakat, és a szavakat gyökéralakokra csökkenti, ami általában javítja a lekérdezési válaszok robusztusságát. Ha azonban meg kell őriznie a kötőjeleket, vagy ha a sztringek speciális karaktereket tartalmaznak, előfordulhat, hogy egyéni elemzőket kell konfigurálnia, hogy az index a megfelelő formátumú jogkivonatokat tartalmazzon. További információ: Részleges kifejezéskeresés és speciális karakterekkel (kötőjelek, helyettesítő karakterek, regex, minták) rendelkező minták.

Egyezések számlálása

A count paraméter az index azon dokumentumainak számát adja vissza, amelyek egyezésnek minősülnek a lekérdezéshez. A szám visszaadásához adja hozzá $count=true a lekérdezési kérelemhez. A keresési szolgáltatás nem ír elő maximális értéket. A lekérdezéstől és a dokumentumok tartalmától függően a szám olyan magas lehet, mint az index összes dokumentuma.

A darabszám akkor pontos, ha az index stabil. Ha a rendszer aktívan ad hozzá, frissít vagy töröl dokumentumokat, a szám hozzávetőleges lesz, kivéve a nem teljes indexelt dokumentumokat.

A keresési szolgáltatás rutinszerű karbantartása és egyéb számítási feladatai nem befolyásolják a számokat. Ha azonban több partícióval és egyetlen replikával rendelkezik, rövid távú ingadozásokat tapasztalhat a dokumentumszámban (néhány perc), amikor a partíciók újraindulnak.

Tipp.

Az indexelési műveletek ellenőrzéséhez egy üres keresési search=* lekérdezés hozzáadásával $count=true ellenőrizheti, hogy az index tartalmazza-e a várt számú dokumentumot. Az eredmény az indexben lévő dokumentumok teljes száma.

A lekérdezés szintaxisának tesztelése során gyorsan megállapíthatja, $count=true hogy a módosítások nagyobb vagy kevesebb eredményt adnak-e vissza, ami hasznos visszajelzés lehet.

Lapozás eredményei

Alapértelmezés szerint a keresőmotor legfeljebb az első 50 találatot adja vissza. Az első 50-et a keresési pontszám határozza meg, feltéve, hogy a lekérdezés teljes szöveges keresés vagy szemantikai. Ellenkező esetben az első 50 egy tetszőleges sorrend a pontos egyezéses lekérdezésekhez (ahol az egységes "@searchScore=1,0" tetszőleges rangsorolást jelez).

Az eredményhalmazban visszaadott összes dokumentum lapszámozásának szabályozásához adja hozzá és adja hozzá $top a $skip paramétereket a GET lekérdezési kérelemhez vagy topskip a POST lekérdezési kérelemhez. Az alábbi lista ismerteti a logikát.

  • Adja vissza az első 15 egyező dokumentumot, valamint a teljes egyezések számát: GET /indexes/<INDEX-NAME>/docs?search=<QUERY STRING>&$top=15&$skip=0&$count=true

  • Adja vissza a második készletet, és kihagyja az első 15-öt a következő 15 lekéréséhez: $top=15&$skip=15. Ismételje meg a 15-ös harmadik készletet: $top=15&$skip=30

A lapszámozott lekérdezések eredményei nem garantáltan stabilak, ha a mögöttes index megváltozik. A lapozás megváltoztatja $skip az egyes lapok értékét, de minden lekérdezés független, és az adatok aktuális nézetén működik, mivel az a lekérdezéskor az indexben található (vagyis nincs gyorsítótárazás vagy pillanatkép az eredményekről, például egy általános célú adatbázisban találhatók).

Az alábbiakban egy példát mutatunk be arra, hogyan szerezheti be az ismétlődéseket. Tegyük fel, hogy egy index négy dokumentummal rendelkezik:

{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }
{ "id": "4", "rating": 1 }

Most tegyük fel, hogy az eredményeket egyszerre kettővel szeretné visszaadni, értékelés szerint rendezve. Ezt a lekérdezést az eredmények első oldalának lekéréséhez hajtja végre: $top=2&$skip=0&$orderby=rating desca következő eredményeket hozva létre:

{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }

A szolgáltatásban tegyük fel, hogy egy ötödik dokumentumot ad hozzá az indexhez a lekérdezéshívások között: { "id": "5", "rating": 4 }. Röviddel ezután végrehajt egy lekérdezést a második oldal lekéréséhez, $top=2&$skip=2&$orderby=rating descés lekéri az alábbi eredményeket:

{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }

Figyelje meg, hogy a 2. dokumentum kétszer lesz beolvasva. Ennek az az oka, hogy az új 5. dokumentum nagyobb értékkel rendelkezik az értékeléshez, ezért a 2. dokumentum előtt rendez, és az első oldalra kerül. Bár ez a viselkedés váratlan lehet, jellemző, hogy a keresőmotor hogyan viselkedik.

Sok találat lapozása

$skip A keresési lekérdezések $top 100 000 találaton keresztüli lapozását teszik lehetővé, de mi a teendő, ha a találatok nagyobbak 100 000-nél? Ha ilyen nagy válaszon szeretne átlapozást végezni, használjon rendezési sorrendet és tartományszűrőt kerülő megoldásként a következőhöz $skip: .

Ebben a kerülő megoldásban a rendezés és a szűrés egy dokumentumazonosító mezőre vagy az egyes dokumentumokhoz egyedi mezőre lesz alkalmazva. Az egyedi mezőnek rendelkeznie filterable kell a sortable keresési indexben és a hozzárendeléssel.

  1. Adjon ki egy lekérdezést a rendezett eredmények teljes oldalának visszaadásához.

    POST /indexes/good-books/docs/search?api-version=2020-06-30
        {  
          "search": "divine secrets",
          "top": 50,
          "orderby": "id asc"
        }
    
  2. Válassza ki a keresési lekérdezés által visszaadott utolsó eredményt. Itt egy csak "id" értékkel rendelkező példaeredmény jelenik meg.

    {
        "id": "50"
    }
    
  3. Használja ezt az "id" értéket egy tartománylekérdezésben az eredmények következő oldalának lekéréséhez. Ennek az "id" mezőnek egyedi értékekkel kell rendelkeznie, ellenkező esetben a lapozás ismétlődő eredményeket tartalmazhat.

    POST /indexes/good-books/docs/search?api-version=2020-06-30
        {  
          "search": "divine secrets",
          "top": 50,
          "orderby": "id asc",
          "filter": "id ge 50"
        }
    
  4. A lapozás akkor fejeződik be, amikor a lekérdezés nulla eredményt ad vissza.

Feljegyzés

A "szűrhető" és a "rendezhető" attribútumok csak akkor engedélyezhetők, ha egy mezőt először adnak hozzá egy indexhez, és nem engedélyezhetők meglévő mezőben.

Az eredmények rendezése

Egy teljes szöveges keresési lekérdezésben a találatok a következő sorrendben rangsorolhatók:

  • keresési pontszám
  • szemantikai reranker-pontszám
  • rendezési sorrend egy "rendezhető" mezőben

Az adott mezőkben található találatokat pontozási profil hozzáadásával is növelheti.

Sorrend keresési pontszám szerint

A teljes szöveges keresési lekérdezések esetében a találatokat automatikusan egy keresési pontszám rangsorolja, amely a kifejezés gyakorisága és közelsége alapján van kiszámítva egy dokumentumban (TF-IDF-ből származik), és magasabb pontszámok jelennek meg a keresési kifejezésben több vagy erősebb találatot tartalmazó dokumentumokban.

A "@search.score" tartomány vagy kötetlen, vagy a régebbi szolgáltatások 0-1,00-ig (de nem beleértve) az 1,00-ig terjedő tartományt.

Bármelyik algoritmus esetében az 1,00-nak megfelelő "@search.score" egy nem rögzített vagy nem rögzített eredményhalmazt jelöl, ahol az 1.0 pontszám minden eredményben egységes. A nem rögzített eredmények akkor fordulnak elő, ha a lekérdezési űrlap zavaros keresés, helyettesítő vagy regex lekérdezés, vagy üres keresés (search=*). Ha rangsorolási struktúrát kell előírnia a nem rögzített eredményekhez képest, fontolja meg ezt a célt elérő $orderby kifejezést.

Rendelés a szemantikai reranker szerint

Szemantikai rangsor használata esetén a "@search.rerankerScore" határozza meg az eredmények rendezési sorrendjét.

A "@search.rerankerScore" tartomány 1 és 4,00 között van, ahol a magasabb pontszám erősebb szemantikai egyezést jelez.

Rendelés $orderby

Ha a konzisztens rendezés alkalmazáskövetelmény, definiálhat egy $orderby kifejezést egy mezőben. Az eredmények rendezéséhez csak az indexelhetőként indexelt mezők használhatók.

A gyakran használt mezők közé tartozik a $orderby minősítés, a dátum és a hely. A hely szerinti szűréshez a szűrőkifejezés a mezőnév mellett a geo.distance() függvényt is meghívja.

A numerikus mezők (Edm.Double, Edm.Int32, Edm.Int64) numerikus sorrendbe vannak rendezve (például 1, 2, 10, 11, 20).

A sztringmezők (Edm.String, Edm.ComplexType almezők) a nyelvtől függően ASCII rendezési sorrendben vagy Unicode rendezési sorrendben vannak rendezve. Semmilyen típusú gyűjteményt nem rendezhet.

  • A sztringmezők numerikus tartalma betűrendbe van rendezve (1, 10, 11, 2, 20).

  • A nagybetűs sztringek kisbetűk előtt vannak rendezve (APPLE, Apple, BANÁN, Banán, alma, banán). A rendezés előtt hozzárendelhet egy szöveg normalizálót a szöveg előfeldolgozásához a viselkedés módosításához. A kisbetűs tokenizer mezőn való használata nem befolyásolja a rendezési viselkedést, mivel az Azure AI Search a mező nem elemzett példányán rendez.

  • A mellékjelekkel rendelkező sztringek utolsóként jelennek meg (Äpfel, Öffnen, Üben)

Relevancia növelése pontozási profillal

A rendeléskonzisztenciát előmozdító másik módszer az egyéni pontozási profil használata. A pontozási profilok nagyobb mértékben szabályozják a keresési eredményekben szereplő elemek rangsorolását, így az adott mezőkben található találatok is növelhetők. A többletpontozási logika segíthet felülbírálni a replikák közötti kisebb különbségeket, mivel az egyes dokumentumok keresési pontszámai távolabb vannak egymástól. Ehhez a megközelítéshez a rangsorolási algoritmust javasoljuk.

Találatok kiemelése

A találatkiemelés szövegformázást (például félkövér vagy sárga kiemelést) jelent, amelyet az eredményben szereplő egyező kifejezésekre alkalmaztak, így könnyen észreveheti az egyezést. A kiemelés olyan hosszabb tartalommezők esetén hasznos, mint például egy leírásmező, ahol az egyezés nem egyértelmű azonnal.

Figyelje meg, hogy a kiemelés az egyes kifejezésekre vonatkozik. A teljes mező tartalma nem emel ki kiemelési képességet. Ha egy kifejezés fölé szeretne emelni, egy idézőjelbe foglalt lekérdezési sztringben kell megadnia az egyező kifejezéseket (vagy kifejezéseket). Ezt a technikát részletesebben ebben a szakaszban ismertetjük.

A találatkiemelési utasításokat a lekérdezési kérelem tartalmazza. A lekérdezésbővítést a motorban aktiváló lekérdezések, például a homályos és a helyettesítő keresés korlátozottan támogatják a találatok kiemelését.

A találatok kiemelésének követelményei

  • A mezőknek Edm.StringCollection(Edm.String)
  • A mezőket kereshető helyen kell hozzárendelni

Kiemelés megadása a kérelemben

A kiemelt kifejezések visszaadásához adja meg a "highlight" paramétert a lekérdezési kérelemben. A paraméter a mezők vesszővel tagolt listájára van beállítva.

Alapértelmezés szerint a formátumjelölés az<em>, de felülbírálhatja a címkét a paraméterek és highlightPostTag a paraméterek használatávalhighlightPreTag. Az ügyfélkód kezeli a választ (például félkövér betűtípust vagy sárga hátteret alkalmaz).

POST /indexes/good-books/docs/search?api-version=2020-06-30 
    {  
      "search": "divine secrets",  
      "highlight": "title, original_title",
      "highlightPreTag": "<b>",
      "highlightPostTag": "</b>"
    }

Az Azure AI Search alapértelmezés szerint mezőnként legfeljebb öt kiemelést ad vissza. Ezt a számot egy kötőjel és egy egész szám összefűzésével módosíthatja. A "leírás" mezőben például "highlight": "description-10" legfeljebb 10 kiemelt kifejezést ad vissza a megfelelő tartalomhoz.

Kiemelt eredmények

Amikor a lekérdezéshez hozzáadja a kiemelést, a válasz minden eredményhez tartalmaz egy "@search.highlights" értéket, hogy az alkalmazáskód megcélozhassa ezt a struktúrát. A "kiemelés" mezőben megadott mezők listája szerepel a válaszban.

A kulcsszókeresésben minden kifejezés külön-külön van beolvasva. Az "isteni titkos kódok" lekérdezése egyezéseket ad vissza minden olyan dokumentumon, amely bármelyik kifejezést tartalmazza.

Képernyőkép egy kifejezés-lekérdezés kiemeléséről.

Kulcsszókeresés kiemelése

A kiemelt mezőkben a program a formázást egész kifejezésekre alkalmazza. Például a "The Divine Secrets of the Ya-Ya Sisterhood" (A Ya-Ya Testvériség isteni titkai) elleni mérkőzésen a formázást minden kifejezésre külön-külön alkalmazza a rendszer, annak ellenére, hogy egymás után vannak.

"@odata.count": 39,
"value": [
    {
        "@search.score": 19.593246,
        "@search.highlights": {
            "original_title": [
                "<em>Divine</em> <em>Secrets</em> of the Ya-Ya Sisterhood"
            ],
            "title": [
                "<em>Divine</em> <em>Secrets</em> of the Ya-Ya Sisterhood"
            ]
        },
        "original_title": "Divine Secrets of the Ya-Ya Sisterhood",
        "title": "Divine Secrets of the Ya-Ya Sisterhood"
    },
    {
        "@search.score": 12.779835,
        "@search.highlights": {
            "original_title": [
                "<em>Divine</em> Madness"
            ],
            "title": [
                "<em>Divine</em> Madness (Cherub, #5)"
            ]
        },
        "original_title": "Divine Madness",
        "title": "Divine Madness (Cherub, #5)"
    },
    {
        "@search.score": 12.62534,
        "@search.highlights": {
            "original_title": [
                "Grave <em>Secrets</em>"
            ],
            "title": [
                "Grave <em>Secrets</em> (Temperance Brennan, #5)"
            ]
        },
        "original_title": "Grave Secrets",
        "title": "Grave Secrets (Temperance Brennan, #5)"
    }
]

Kifejezéskeresés kiemelése

A teljes kifejezésformázás a kifejezéskeresésre is vonatkozik, ahol több kifejezés is kettős idézőjelek közé van zárva. Az alábbi példa ugyanaz a lekérdezés, azzal a kivétellel, hogy az "isteni titkok" idézőjeles kifejezésként lesznek elküldve (egyes REST-ügyfelek megkövetelik, hogy a belső idézőjeleket fordított perjellel \"hárítsa el):

POST /indexes/good-books/docs/search?api-version=2020-06-30 
    {  
      "search": "\"divine secrets\"",,
      "select": "title,original_title",
      "highlight": "title",
      "highlightPreTag": "<b>",
      "highlightPostTag": "</b>",
      "count": true
    }

Mivel a feltétel mindkét feltételt tartalmazza, csak egy egyezés található a keresési indexben. A fenti lekérdezésre adott válasz a következőképpen néz ki:

{
    "@odata.count": 1,
    "value": [
        {
            "@search.score": 19.593246,
            "@search.highlights": {
                "title": [
                    "<b>Divine</b> <b>Secrets</b> of the Ya-Ya Sisterhood"
                ]
            },
            "original_title": "Divine Secrets of the Ya-Ya Sisterhood",
            "title": "Divine Secrets of the Ya-Ya Sisterhood"
        }
    ]
}

Kifejezéskiemelés a régebbi szolgáltatásokon

Search szolgáltatás 2020. július 15-e előtt létrehozottak más kiemelési felületet implementálnak a kifejezés-lekérdezésekhez.

Az alábbi példákhoz tegyük fel, hogy egy lekérdezési sztring tartalmazza a "super bowl" idézőjelbe foglalt kifejezést. 2020 júliusa előtt a kifejezés bármely kifejezése ki van emelve:

"@search.highlights": {
    "sentence": [
        "The <em>super</em> <em>bowl</em> is <em>super</em> awesome with a <em>bowl</em> of chips"
   ]

A 2020 júliusa után létrehozott keresési szolgáltatások esetében csak a teljes kifejezési lekérdezésnek megfelelő kifejezések lesznek visszaadva a "@search.highlights":

"@search.highlights": {
    "sentence": [
        "The <em>super</em> <em>bowl</em> is super awesome with a bowl of chips"
   ]

Következő lépések

Az ügyfél keresési oldalának gyors létrehozásához vegye figyelembe az alábbi lehetőségeket:

  • Az Application Generator a portálon létrehoz egy HTML-oldalt egy keresősávtal, a faceted navigációval és a képeket tartalmazó találati területtel.

  • Az ASP.NET Core (MVC) alkalmazáshoz való keresés olyan oktatóanyag és kódminta, amely egy funkcionális ügyfelet hoz létre.

  • A keresés hozzáadása webalkalmazásokhoz egy oktatóanyag és kódminta, amely a React JavaScript-kódtárakat használja a felhasználói élményhez. Az alkalmazás üzembe helyezése az Azure Static Web Apps használatával történik.