Megosztás a következőn keresztül:


Keresési eredmények formázása vagy a keresési eredmények összetételének módosítása az Azure AI Searchben

Ez a cikk bemutatja a keresési eredmények összetételét, valamint azt, hogyan alakíthatja a keresési eredményeket a forgatókönyvek szerint. A keresési eredmények egy lekérdezési válaszban jelennek meg. A válasz alakját maga a lekérdezés paraméterei határozzák meg. Ezek a paraméterek a következők:

  • Az indexben található egyezések száma (count)
  • A válaszban visszaadott egyezések száma (alapértelmezés szerint 50, konfigurálható top) vagy oldalanként (skip és top)
  • Az egyes találatok keresési pontszáma, amelyet a rangsoroláshoz használnak (@search.score)
  • Keresési eredményekben szereplő mezők (select)
  • Rendezési logika (orderby)
  • Az eredményen belüli kifejezések kiemelése, egyezés a teljes vagy részleges kifejezésre a törzsben
  • Választható elemek a szemantikai rangsorolóból (answers felül, captions minden mérkőzéshez)

A keresési eredmények tartalmazhatnak legfelső szintű mezőket, de a válasz nagy része egy tömb dokumentumainak egyeztetéséből áll.

Ügyfelek és API-k a lekérdezési válasz meghatározásához

A lekérdezési válasz konfigurálásához az alábbi ügyfeleket használhatja:

Eredményösszeállítás

Az eredmények többnyire táblázatosak, vagy az összes retrievable mező mezőiből állnak, vagy csak a select paraméterben megadott mezőkre korlátozódnak. A sorok az egyező dokumentumok, amelyek általában relevancia szerinti sorrendben vannak rangsorolva, kivéve, ha a lekérdezési logika nem zárja ki a relevancia szerinti rangsorolást.

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 retrievable 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 a felhasználó átkattintási válaszának meghívásához. 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=2024-07-01 
    {  
      "search": "sandy beaches",
      "select": "HotelId, HotelName, Description, Rating, Address/City",
      "count": true
    }

Tippek váratlan eredményekhez

Időnként a lekérdezés kimenete nem az, amire számít. 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ő megszakítja az elválasztott szavakat, és gyökéralakokra csökkenti a szavakat, 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, 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.

A válaszban szereplő eredmények száma

Az Azure AI Search kiszolgálóoldali lapozással megakadályozza, hogy a lekérdezések egyszerre túl sok dokumentumot beolvasjanak. A válaszban szereplő eredmények számát meghatározó lekérdezési paraméterek a következők top : és skip. top egy lapon található keresési eredmények számára hivatkozik. skip egy intervallum top, és azt jelzi a keresőmotornak, hogy hány találatot kell kihagynia a következő készlet beolvasása előtt.

Az alapértelmezett oldalméret 50, míg a maximális oldalméret 1000. Ha 1000-nél nagyobb értéket ad meg, és az indexben több mint 1000 találat található, csak az első 1000 találat lesz visszaadva. Ha az egyezések száma meghaladja az oldalméretet, a válasz tartalmazza a következő találatoldal lekérésére vonatkozó információkat. Példa:

"@odata.nextLink": "https://contoso-search-eastus.search.windows.net/indexes/realestate-us-sample-index/docs/search?api-version=2024-07-01"

A leggyakoribb találatokat a keresési pontszám határozza meg, feltéve, hogy a lekérdezés teljes szöveges keresés vagy szemantikai. Ellenkező esetben a legfelső egyezések tetszőleges sorrendben jelennek meg a pontos egyezéses lekérdezésekhez (ahol az egyenruhák @search.score=1.0 tetszőleges rangsorolást jelölnek).

Állítsa be top az alapértelmezett 50-et felülbírálásra. Az újabb előzetes verziójú API-kban, ha hibrid lekérdezést használ, legfeljebb 10 000 dokumentum visszaadásához megadhatja a maxTextRecallSize értéket.

Az eredményhalmazban visszaadott összes dokumentum lapozásának szabályozásához használja és skip együtttop. Ez a lekérdezés 15 egyező dokumentum első halmazát adja vissza, valamint a teljes egyezések számát.

POST https://contoso-search-eastus.search.windows.net/indexes/realestate-us-sample-index/docs/search?api-version=2024-07-01

{
    "search": "condos with a view",
    "count": true,
    "top": 15,
    "skip": 0
}

Ez a lekérdezés a második halmazt adja vissza, és kihagyja az első 15-öt a következő 15 lekéréséhez (16–30):

POST https://contoso-search-eastus.search.windows.net/indexes/realestate-us-sample-index/docs/search?api-version=2024-07-01

{
    "search": "condos with a view",
    "count": true,
    "top": 15,
    "skip": 15
}

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

A lapozás alternatív módszere a rendezési sorrend és a tartományszűrő használata kerülő megoldásként.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=2024-07-01
        {  
          "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 azonosító értékkel rendelkező példaeredmény jelenik meg.

    {
        "id": "50"
    }
    
  3. Használja ezt az azonosítóértéket egy tartománylekérdezésben a következő találatoldal lekéréséhez. Ennek az azonosító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=2024-07-01
        {  
          "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

Az filterable és sortable az attribútumok csak akkor engedélyezhetők, ha először hozzáadnak egy mezőt egy indexhez, és nem engedélyezhetők egy 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 sortable 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 egy BM25-algoritmus használatával automatikusan rangsorolja egy keresési pontszám , amely a kifejezés gyakorisága, a dokumentum hossza és az átlagos dokumentumhossz alapján van kiszámítva.

A @search.score tartomány vagy kötetlen, vagy 0 legfeljebb 1,00 a régebbi szolgáltatásokon (de nem beleértve) 1,00-ig.

Bármelyik algoritmus @search.score esetében az 1,00-es érték 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

Ha szemantikai rangsorolót használ, az @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-vel

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.Int64numerikus sorrendbe vannak rendezve (például 1, 2, 10, 11, 20).

A sztringmezők (Edm.StringalmezőkEdm.ComplexType) a nyelvtől függően ASCII rendezési sorrendben vagy Unicode rendezési sorrendben vannak rendezve.

  • 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 nincs hatással a rendezési viselkedésre, mivel az Azure AI Search a mező nem elemezett 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 meg kell adnia 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 a searchable

Kiemelés megadása a kérelemben

A kiemelt kifejezések visszaadásához adja meg a kiemelési 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=2024-07-01
    {  
      "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ásmezőben például "highlight": "description-10" legfeljebb 10 kiemelt kifejezést ad vissza.

Kiemelt eredmények

Amikor a rendszer kiemeli a lekérdezést, a válasz minden eredményhez tartalmaz egy-egy @search.highlights találatot, hogy az alkalmazáskód meg tudja célozni 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ést 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=2024-07-01 
    {  
      "search": "\"divine secrets\"",
      "select": "title,original_title",
      "highlight": "title",
      "highlightPreTag": "<b>",
      "highlightPostTag": "</b>",
      "count": true
    }

Mivel a feltételeknek most már mindkét kifejezésük van, csak egy egyezés található a keresési indexben. Az előző 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 a rendszer csak a teljes kifejezés-lekérdezésnek megfelelő kifejezéseket adja vissza @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:

  • Hozzon létre egy bemutatóalkalmazást az Azure Portalon, és hozzon létre egy HTML-oldalt egy keresősávtal, egy arccal ellátott navigációval és egy miniatűr területtel, ha van képe.

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

  • Keresés hozzáadása webalkalmazásokhoz egy C#-oktatóanyag és kódminta, amely a React JavaScript-kódtárakat használja a felhasználói élmény érdekében. Az alkalmazás az Azure Static Web Apps használatával van üzembe helyezve, és a lapozást implementálja.