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
éstop
) - 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:
- Kereséskezelő az Azure Portalon JSON-nézetben, hogy bármilyen támogatott paramétert meg tud adni
- Dokumentumok – POST (REST API-k)
- SearchClient.Search metódus (.NET-hez készült Azure SDK)
- SearchClient.Search metódus (Azure SDK for Python)
- SearchClient.Search metódus (Azure for JavaScript)
- SearchClient.Search metódus (Azure for Java)
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, hogysearchMode=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 desc
a 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.
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" }
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" }
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" }
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.Int64
numerikus sorrendbe vannak rendezve (például 1, 2, 10, 11, 20).
A sztringmezők (Edm.String
almező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.String
Collection(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.
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.