A keresési eredmények Azure Cognitive Search

Ez a cikk bemutatja, hogyan lehet lekérdezési választ alkotni a Azure Cognitive Search. A válasz struktúráját a lekérdezés paraméterei határozzák meg: Dokumentum keresése a REST API vagy SearchResults osztály a .NET SDK-ban. A lekérdezés paramétereivel az eredményhalmaz a következő módokon struktúraható fel:

  • Korlátozza vagy kötegbe kötegeként az eredményekben a dokumentumok számát (alapértelmezés szerint 50)
  • Az eredményekbe foglalni kívánt mezők kiválasztása
  • Rendelési eredmények
  • Egyező teljes vagy részleges kifejezés kiemelése a keresési eredmények törzsében

Eredményösszetétel

Bár a keresési dokumentumok nagy számú mezőből állhatnak, általában csak néhányra van szükség ahhoz, hogy az egyes dokumentumokat az eredményhalmazban ábrázolják. Lekérdezési kérelem esetén fűzz hozzá a következőt: . Ezzel adja meg, hogy mely mezők $select=<field list> mutassanak a válaszban. Egy mezőnek Lekért értékként kell szerepelnie az indexben ahhoz, hogy az eredményben szerepelnie kell.

A legjobban megfelelő mezők közé tartoznak azok, amelyek kontrasztosak és megkülönböztetik a dokumentumokat, így elegendő információ áll rendelkezésre a felhasználó részéről egy átkattintásos válasz meghívásához. Az e-kereskedelmi webhelyeken ez lehet egy terméknév, leírás, márka, szín, méret, ár és értékelés. A hotels-sample-index beépített minta esetében a következő példában a 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
    }

Megjegyzés

Ha képfájlokat szeretne szerepeletni egy eredményben, például egy termékképet vagy emblémát, tárolja azokat a Azure Cognitive Search-n kívül, de az indexben egy mezőt is, amely a kép URL-címére hivatkozik a keresési dokumentumban. Az eredményekben képeket támogató mintaindexek közé tartozik a realestate-sample-us bemutató, amely ebben a rövid útmutatóban szerepel,és a New York City Jobs bemutatóalkalmazás.

Tippek nem várt eredmények

Az eredmények szerkezete nem mindig váratlan, és nem a struktúra. Ha a lekérdezési eredmények váratlanak, az alábbi lekérdezésmódosításokkal láthatja, hogy javulnak-e az eredmények:

  • Módosítsa az (alapértelmezett) értéket úgy, hogy a feltételek helyett az összes feltételre searchMode=any searchMode=all vonatkozó egyezést követel 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ők vagy egyéni elemzők használatával, hogy lássa, módosítja-e a lekérdezés eredményét. Az alapértelmezett elemző felosztja a kötőjellel elválasztott szavakat, és gyökér űrlapokra csökkenti a szavakat, ami általában javítja a lekérdezési válasz 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 megfelelő formátumú jogkivonatokat tartalmaz. További információ: Részleges kifejezéskeresés és speciális karaktereket (kötőjelek, helyettesítő karakterek, regex, minták).

Lapozás eredményei

Alapértelmezés szerint a keresőmotor legfeljebb az első 50 egyezést adja vissza, amit a keresési pontszám határoz meg, ha a lekérdezés teljes szöveges keresés, vagy tetszőleges sorrendben a pontos egyezéses lekérdezésekhez.

Ha eltérő számú egyező dokumentumot szeretne visszaadni, adja hozzá a $top és $skip paramétereket a lekérdezési kérelemhez. Az alábbi lista a logikát ismerteti.

  • Az indexen belüli egyező dokumentumok teljes számának lekért $count=true darabszámának lekért érték.

  • Adja vissza az első 15 egyező dokumentumkészletet, valamint az egyezések teljes 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 hagyja ki az első 15-öt a következő 15-ről: $top=15&$skip=15 . Tegye meg ugyanezt a harmadik, 15-ös halmazon: $top=15&$skip=30

A lapszámozott lekérdezések eredményei nem garantáltan stabilak az alapul szolgáló index módosítása esetén. A lapozás módosítja az egyes oldalak értékét, de minden lekérdezés független, és úgy működik az adatok aktuális nézetén, ahogy az indexben a lekérdezéskor szerepel (vagyis nem található gyorsítótárazás vagy pillanatkép az eredményekről, például egy általános célú $skip adatbázisban).

Az alábbiakban egy példát mutatunk be arra, hogyan lehet duplikált adatokat kapni. Tegyük fel, hogy egy index négy dokumentumból van:

{ "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, minősítés szerint rendezetten. A lekérdezés végrehajtásával lekérdezheti az eredmények első oldalát: $top=2&$skip=0&$orderby=rating desc , amely a következő eredményeket tartalmazza:

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

A szolgáltatásban tegyük fel, hogy egy ötödik dokumentum van hozzáadva az indexhez a lekérdezési hí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 az alábbi eredményeket kell kapnia:

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

Figyelje meg, hogy a 2. dokumentum kétszer lesz behívva. Ennek az az oka, hogy az új 5. dokumentum magasabb minősítési értékkel rendelkezik, ezért a 2. dokumentum előtt rendez, és az első oldalra ér. Bár ez a viselkedés váratlan lehet, a keresőmotorok viselkedésére jellemző.

Az eredmények rendezése

A teljes szöveges keresési lekérdezések esetében az eredmények automatikusan egy keresési pontszám alapján vannak rangsorolva, amely a kifejezés gyakorisága és a dokumentumban való közelség alapján van kiszámítva (a TF-IDF-bőlszármaztatva), és a magasabb pontszámok a keresési kifejezésben több vagy erősebb egyezést mutató dokumentumokhoz kerülnek.

A keresési pontszámok a relevancia általános érzékelését tükrözik, ami az egyezés erősségét tükrözi az ugyanannak az eredményhalmaznak a többi dokumentumához viszonyítva. A pontszámok azonban nem mindig konzisztensek az egyik lekérdezéstől a következőig, így a lekérdezések használata során kis eltéréseket tapasztalhat a keresési dokumentumok rendezettségében. Ennek több magyarázata is lehet.

Ok Description
Adatingadozás Az index tartalma a dokumentumok hozzáadása, módosítása vagy törlése esetén változik. A kifejezés gyakorisági ideje az indexfrissítések feldolgozása során változik, ami hatással van az egyező dokumentumok keresési pontszámára.
Több replika A több replikát használó szolgáltatások esetén a lekérdezések párhuzamosan vannak kibocsátva az egyes replikákon. A keresési pontszám kiszámításához használt indexstatisztikák számítása replikánként történik, az eredmények egyesítése és rendezettek a lekérdezési válaszban. A replikák többnyire egymás tükrözöttek, de a statisztikák az állapot kis eltérései miatt eltérhetnek. Előfordulhat például, hogy egy replika törölte a statisztikákhoz hozzájáruló, más replikákból egyesített dokumentumokat. A replikánkénti statisztikák eltérései általában észrevehetőbbek a kisebb indexek között.
Azonos pontszámok Ha több dokumentum is ugyanazt a pontszámot kap, előfordulhat, hogy azok valamelyike jelenik meg először.

Konzisztens sorrend biztosítása

Ha a konzisztens sorrend alkalmazáskövetelmény, explicit módon definiálhat $orderby egy kifejezést egy mezőn. Csak az indexelt mezők sortable használhatók az eredmények megrendeléséhez. Az értékelés, dátum és hely mezőkben gyakran használt mezők, ha a paraméter értékét úgy adja meg, hogy a mezőneveket és a térinformatikai értékek függvényének $orderby orderby hívásait tartalmazza. geo.distance()

A konzisztenciát támogató másik megközelítés az egyéni pontozási profil használata. A pontozási profilok nagyobb kontrollt adnak a keresési eredményekben lévő elemek rangsorolása felett, és növelheti az adott mezőkben található egyezéseket. A további pontozási logika segíthet felülbírálni a replikák közötti kisebb különbségeket, mert az egyes dokumentumok keresési pontszámai eltérőek. Ehhez a megközelítéshez a rangsorolási algoritmus használatát javasoljuk.

Találatok kiemelése

A találatok kiemelése szövegformázásra (például félkövér vagy sárga kiemelés) vonatkozik, amely az egyező kifejezésekre van alkalmazva, így könnyen észrevehető az egyezés. A találatok kiemelésére vonatkozó utasítások a lekérdezési kérelemben jelennek meg.

A találatok kiemelésének engedélyezéséhez adja hozzá a következőt: . Ezzel megadja, hogy highlight=[comma-delimited list of string fields] mely mezők fogják használni a kiemelést. A kiemelés hosszabb tartalommezőknél hasznos, például a leírás mezőnél, ahol az egyezés nem azonnal nyilvánvaló. A találatok kiemelése csak a kereshetőként rendelt meződefiníciókra érvényes.

Alapértelmezés szerint a Azure Cognitive Search legfeljebb öt kiemelést ad vissza mezőnként. Ezt a számot úgy módosíthatja, hogy hozzáfűz egy kötőjelet, majd egy egész számot a mezőhöz. A például legfeljebb 10 kiemelést ad vissza a Leírás highlight=Description-10 mező egyező tartalmához.

A rendszer teljes kifejezéses lekérdezésekre alkalmaz formázást. A formázás típusát a és a címkék határozzák meg, és a kód kezeli a választ (például félkövér betűt vagy sárga highlightPreTag highlightPostTag hátteret alkalmaz).

A következő példában a Leírás mezőben található "sand", "sand", "beaches", "beach" kifejezés kiemelésre van megjelölve. A motor lekérdezésbővítését kiváltó lekérdezések, például az fuzzy és a helyettesítő karakteres keresés korlátozottan támogatják a találatok kiemelését.

GET /indexes/hotels-sample-index/docs/search=sandy beaches&highlight=Description?api-version=2020-06-30 
POST /indexes/hotels-sample-index/docs/search?api-version=2020-06-30 
    {  
      "search": "sandy beaches",  
      "highlight": "Description"
    }

Új viselkedés (július 15-től kezdődően)

A 2020. július 15. után létrehozott szolgáltatások más kiemelési élményt nyújtanak. Az ezen dátum előtt létrehozott szolgáltatások kiemelési viselkedése nem változik.

Az új viselkedéssel:

  • Csak a teljes kifejezéslekérdezésnek megfelelő kifejezések lesznek visszaadva. A "Super Bowl" lekérdezési kifejezés az ehhez hasonló kiemeléseket adja vissza:

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

    Vegye figyelembe, hogy a Super and Bowl többi példánya nem rendelkezik kiemeléssel, mert ezek a példányok nem egyeznek meg a teljes kifejezéssel.

Ha olyan ügyfélkódot ír, amely a találatok kiemelését valósítja meg, vegye figyelembe ezt a változást. Vegye figyelembe, hogy ez csak akkor lesz hatással az Ön számára, ha teljesen új keresési szolgáltatást hoz létre.

Következő lépések

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

  • Az Alkalmazásgenerátora portálon létrehoz egy HTML-oldalt, amely tartalmaz egy keresősávot, a faceted navigation és a results area (eredmények) területet, amely képeket tartalmaz.
  • Az első C# alkalmazás létrehozása egy oktatóanyag, amely egy működő ügyfelet hoz létre. A mintakód bemutatja a lapszámozott lekérdezéseket, a találatok kiemelését és a rendezést.

Számos kódminta tartalmaz egy webes kezelőfelületet, amelyet itt talál: New York City Jobs bemutatóalkalmazás vagy JavaScript-mintakód élő bemutatówebhelytel.