Pontozási profilok hozzáadása keresési indexhez

Teljes szöveges keresési lekérdezések esetén a keresőmotor minden egyező dokumentumhoz kiszámít egy keresési pontszámot, amely lehetővé teszi az eredmények magasról alacsonyra való rangsorolását. Azure Cognitive Search pontozási algoritmust használ a kezdeti pontszám kiszámításához, de a számítást testreszabhatja egy pontozási profillal.

A pontozási profilok indexdefiníciókba vannak beágyazva, és az egyezések pontszámának növelése érdekében tartalmaznak tulajdonságokat, ahol a profilban található további feltételek biztosítják a kiemelési logikát. Például növelheti a találatokat a bevételi lehetőségeik alapján, új elemeket népszerűsíthet, vagy esetleg növelheti a túl hosszú leltárban lévő elemeket.

Nem ismeri a relevancia fogalmát? A következő videószegmens előre halad a pontozási profilok Azure Cognitive Search, de a videó az alapfogalmakat is bemutatja. További háttér-információkért érdemes lehet áttekintenünk a hasonlóság rangsorolását és pontozását is.

Mi az a pontozási profil?

A pontozási profil az indexdefiníció része, és súlyozott mezőkből, függvényekből és paraméterekből áll. A pontozási profil célja az egyező dokumentumok növelése vagy növelése az Ön által megadott feltételek alapján.

Az alábbi definíció egy "geo" nevű egyszerű profilt mutat be. Ez növeli az eredményeket, amelyek a hotelName mezőben található keresőkifejezést jelentik. A függvényt használja az aktuális helytől tíz kilométerre lévő distance eredmények előnyben való előnyben. Ha valaki az "inn" kifejezésre keres, és az "inn" a szálloda nevének része, akkor az aktuális hely 10 km-es körzetében lévő "inn" értékekkel (inn) együtt található szállodákat is magában foglaló dokumentumok magasabban jelennek meg a keresési eredmények között.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Ennek a pontozási profilnak a használhatja a lekérdezést úgy, hogy meghatározza a scoringProfile paramétert a kérésben.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameter": currentLocation--122.123,44.77233
}

Ez a lekérdezés rákeres az "inn" kifejezésre, és az aktuális helyen ad át adatokat. Figyelje meg, hogy ez a lekérdezés más paramétereket is tartalmaz, például a scoringParameter paramétert. A lekérdezési paraméterek leírását a Dokumentumok keresése (REST API) ismerteti.

A kiterjesztett példában részletesebb példát is láthat egy pontozási profilra.

Pontszámok kiszámítása

A pontszámok teljes szöveges keresési lekérdezésekhez vannak kiszámítva, a legfontosabb egyezések rangsorolása és a válasz tetején való visszaadása céljából. Az egyes dokumentumok összesített pontszáma az egyes mezők egyéni pontszámainak összesítése, ahol az egyes mezők egyéni pontszáma az adott mezőben található keresett kifejezések kifejezésgyakorra és dokumentumgyakorra alapján van kiszámítva (más néven TF-IDF vagy kifejezésgyakorra fordított dokumentum gyakorisága).

Tipp

A featuresMode paraméterrel további pontozási adatokat kérhet le a keresési eredményekkel együtt (beleértve a mezőszintű pontszámokat).

Mikor kell pontozási logikát hozzáadni?

Akkor érdemes létrehozni egy vagy több pontozási profilt, ha az alapértelmezett rangsorolási viselkedés nem elég messze van az üzleti célok eléréséhez. Dönthet például úgy, hogy a keresés relevanciája az újonnan hozzáadott elemeket támogatja. Hasonlóképpen, lehet egy olyan mezője, amely fedezeti mutatót tartalmaz, vagy egy másik mezőt, amely a bevételi lehetőségeket jelzi. A pontozási profilok bevezetésének gyakran meghatározó tényezője a felhasználók vagy a vállalat számára jelentéssel bíró eredmények növelése.

A keresési oldalon a relevanciaalapú sorrend beállítása pontozási profilokon keresztül is meg van valósítva. Fontolja meg a korábban használt keresési eredmények oldalát, amelyek ár, dátum, értékelés vagy relevancia alapján rendeznek. A Azure Cognitive Search pontozási profilokkal lehet a "relevancia" lehetőséget használni. A relevancia definícióját Ön vezérli, az üzleti célkitűzésekre és a kínálni kívánt keresési élmény típusának meghatározására van kivetve.

Kiterjesztett példa

Az alábbi példa egy index sémáját mutatja be két pontozási profillal ( boostGenre , newAndHighlyRated ). Az index lekérdezési paraméterként bármelyik profilt tartalmazó lekérdezések a profilt használják az eredményhalmaz pontozása érdekében.

A profil súlyozott szövegmezőket használ, és növeli a találatok találatokat a boostGenre következő mezőkben: ." A mezők 1,5, 5 és 2 kiemelése. Miért van a műfaj olyan magasabbra növelve, mint a többi? Ha valamelyest homogén adatokon végeznek keresést (ahogyan a musicstoreindexben a műfaj esetében), akkor a relatív súlyok nagyobb eltérésére lehet szükség. A zeneáruházindexben például a "rock" műfajként és azonos kifejezésű műfajleírásokban is megjelenik. Ha azt szeretné, hogy a műfaj meghaladja a műfaj leírását, a műfaj mezőjének sokkal nagyobb relatív súlyra lesz szüksége.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Pontozási profil hozzáadásának lépései

Az egyéni pontozási viselkedés megvalósításához adjon hozzá egy pontozási profilt az indexet meghatározó sémához. Egy indexben legfeljebb 100 pontozási profilt lehet létrehozni (lásd: Szolgáltatáskorlátok), de egy adott lekérdezésben egyszerre csak egy profil adható meg.

  1. Kezdje egy indexdefinícióval. Meglévő indexhez anélkül adhat hozzá és frissíthet pontozási profilokat, hogy újra létre kell hoznia azt. A változatot egy frissítési indexre vonatkozó kéréssel tegye közzé.

  2. Illessze be a témakörben megadott sablont.

  3. Adjon meg egy nevet. A pontozási profilok megadása nem kötelező, de ha hozzáad egy profilt, a név megadása kötelező. Mindenképpen kövesse Cognitive Search elnevezési konvencióit (betűvel kezdődik, elkerüli a speciális karaktereket és a fenntartott szavakat).

  4. Adja meg a kiemelési feltételeket. Egyetlen profil tartalmazhat súlyozott mezőket, függvényeketvagy mindkettőt.

Iteratívan kell dolgoznia egy olyan adatkészlet használatával, amely segít bizonyítani vagy megcáfni egy adott profilt.

Pontozási profilok az Azure Portal-ban határozhatóak meg az alábbi képernyőképen látható módon, vagy programozott módon REST API-kon keresztül vagy Azure SDK-kban, például a ScoringProfile osztályban az Azure SDK for .NET-en.

Pontozási profilok hozzáadása oldal

Súlyozott mezők használata

Súlyozott mezőket akkor használjon, ha a mezőkörnyezet fontos, és a lekérdezések teljes szöveges keresések (más néven szabad szöveges keresések). Ha például egy lekérdezés tartalmazza az "airport" kifejezést, előfordulhat, hogy a Leírás mezőben a "airport" kifejezésnek nagyobb súlyozásra van szükség, mint a HotelName mezőben.

A súlyozott mezők kereshető mezőből és egy szorzóként használt pozitív számból állnak. Ha a HotelName eredeti mezőpontszáma 3, akkor a mezőre vonatkozó megnövelt pontszám 6 lesz, ami hozzájárul a szülődokumentum összesített pontszámának magasabb értékéhez.

"scoringProfiles": [  
{  
  "name": "boostKeywords",  
  "text": {  
    "weights": {  
      "HotelName": 2,  
      "Description": 5 
    }  
  }  
}

Függvények használata

Akkor használjon függvényeket, ha az egyszerű relatív súlyok nem elégségesek vagy nem alkalmazhatók, például a távolság és a frissesség esetében, amelyek numerikus adatokkal kapcsolatos számítások. Pontozási profilonként több függvényt is megadhat.

Függvény Leírás
"freshness" A datetime mezőben (Edm.DataTimeOffset) megadott értékek alapján növeli a növelést. Ez a függvény rendelkezik egy attribútummal, így megadható egy érték, amely azt az időkorratot ábrázolja, amelyen a boostingDuration kiemelés megtörténik.
"nagyságrend" A számértékek magasságának vagy alacsony értékének alapján növelheti a növelést. A függvényt hívó forgatókönyvek közé tartozik a nyereség növelése, a legmagasabb ár, a legalacsonyabb ár vagy a letöltések száma. Ez a függvény csak az Edm.Double és a Edm.Int használható. A magnitude függvény esetén megfordíthatja a tartományt magasról alacsonyra, ha az inverz mintát szeretné (például a magasabb árnál magasabb árú tételek árának növelése érdekében). A 100 usd és 1 dollár között egy adott ártartományban a "boostingRangeStart" 100-ra, a "boostingRangeEnd" pedig 1-re van állítva az alacsonyabb árú tételek növelése.
"distance" Növeli a közelséget vagy a földrajzi helyet. Ez a függvény csak az Edm.GeographyPoint mezőkkel használható.
"tag" A keresési dokumentumokban és a lekérdezési sztringekban gyakran használt címkék alapján növeli a növelést. A címkék egy fájlban tagsParameter biztosítanak. Ez a függvény csak Edm.String és Collection(Edm.String) mezőkkel használható.

A függvények használatának szabályai

  • A függvények csak olyan mezőkre alkalmazhatók, amelyek szűrhetőként vannak megszűrve.
  • A függvény típusának ("freshness", "magnitude", "distance", "tag") kisbetűsnek kell lennie.
  • A függvények nem tartalmazhatnak null vagy üres értékeket.

Sablon

Ez a szakasz a pontozási profilok szintaxisát és sablonját mutatja be. A pontozási profil attribútumainak leírását a következő szakaszban, a Tulajdonsághivatkozás szakaszban található.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Tulajdonsághivatkozás

Attribútum Leírás
name Kötelező. Ez a pontozási profil neve. Egy mező elnevezési konvencióit követi. Betűvel kell kezdődnie, nem tartalmazhat pontokat, kettőspontokat vagy @ szimbólumokat, és nem kezdődhet az azureSearch kifejezéssel (a kis- és nagybetűk megkülönböztetése).
szöveg A weights tulajdonságot tartalmazza.
weights Választható. Név-érték párok, amelyek kereshető mezőt és pozitív egész számot vagy lebegőpontos számot határoznak meg, amellyel egy mező pontszámát növelheti. A pozitív egész szám vagy szám a rangsorolási algoritmus által generált eredeti mezőpontszám szorzója lesz. Ha például egy mező pontszáma 2, a súlyozás értéke pedig 3, a mező súlyozott pontszáma 6 lesz. Ezután a rendszer összesíti az egyes mezőpontszámokat a dokumentum mezőpontszámának létrehozásához, amelyet a rendszer a dokumentum eredményhalmazban való rangsorolására használ.
Funkciók Választható. Pontozási függvény csak szűrhető mezőkre alkalmazható.
függvények > típus Pontozási függvények esetén szükséges. A használni szükséges függvény típusát jelzi. Az érvényes értékek közé tartozik a nagyságrend, a frissesség, a távolság és a címke. Minden pontozási profilhoz több függvényt is tartalmazhat. A függvény nevének kisbetűsnek kell lennie.
függvények > növelése Pontozási függvények esetén szükséges. A nyers pontszám szorzójaként használt pozitív szám. Nem lehet egyenlő 1-et.
a > mezőnév függvénye Pontozási függvények esetén szükséges. Pontozási függvény csak olyan mezőkre alkalmazható, amelyek az index mezőgyűjteményének részei, és amelyek szűrhetők. Emellett minden függvénytípushoz további korlátozások is vonatkoznak (a frissesség a datetime mezőkkel, az egész vagy dupla mezőkkel együtt, a távolság a hely mezőkkel együtt). Függvénydefiníciónként csak egyetlen mezőt lehet megadni. Ha például kétszer szeretne nagyságrendet használni ugyanabban a profilban, két definíciót kell tartalmaznia, egyet-egyet minden mezőhöz.
interpolációt > függvények Pontozási függvények esetén szükséges. Meghatározza azt a meredekség, amelynek növekedésével a pontszám növelése a tartomány kezdetével a tartomány végéig növekszik. Az érvényes értékek közé tartozik a Lineáris (alapértelmezett), a Konstans, a Másodfokú és a Logaritmikus érték. Részletekért lásd: Interpolációk beállítása.
függvények > nagyságrendje A nagyságrendi pontozási függvény egy numerikus mező értékeinek tartománya alapján módosítja a rangsorolást. A leggyakoribb használati példák többek között a következőek:

"Csillag minősítések:" A pontozást a "Csillag minősítés" mezőben található érték alapján módosíthatja. Ha két elem releváns, először a magasabb minősítésű elem jelenik meg.
"Margin:" Ha két dokumentum releváns, előfordulhat, hogy egy kereskedő előbb a nagyobb margóval kapcsolatos dokumentumokat szeretné kiemelni.
"Kattintásszámok:" Azon alkalmazások esetében, amelyek nyomon követik a kattintással a termékekre vagy oldalakra való kattintást, nagyságrendekkel növelheti a legnagyobb forgalmat általában kihozó elemeket.
"Letöltések száma:" A letöltéseket nyomon követésére használt alkalmazások esetében a magnitude függvény lehetővé teszi a legtöbb letöltést eltöltő elemek kiemelését.
függvények > a boostingRangeStart > nagyságrendje Annak a tartománynak a kezdőértékét állítja be, amelynél a pontszám nagyságrendje meg van va. Az értéknek egész számnak vagy lebegőpontos számnak kell lennie. Az 1 és 4 csillag értékelésekhez ez 1. 50% fölötti margók esetén ez 50.
függvények > a boostingRangeEnd > nagyságrendje Annak a tartománynak a záróértékét állítja be, amelynél a pontszám nagyságrendje meg van va. Az értéknek egész számnak vagy lebegőpontos számnak kell lennie. Az 1 és 4 csillag értékelésekhez ez 4.
A függvények > a constantBoostBeyondRange > nagysága Az érvényes értékek true (igaz) vagy false (hamis) (alapértelmezett). Ha true (igaz) értékre van állítva, a teljes kiemelés továbbra is érvényes lesz azokra a dokumentumokra, amelyek a tartomány felső végének magasabb értékkel bírnak a célmezőben. Ha hamis, a függvény növelése nem lesz alkalmazva olyan dokumentumokra, amelyek értéke a tartományon kívülre esik a célmezőben.
a függvények > frissességét A freshness scoring függvény az elemek rangsorolási pontszámainak megváltoztatására használható a DateTimeOffset mezők értékei alapján. Egy frissebb dátummal egy elem például magasabbra rangsorolva lehet, mint a régebbiek.

Az olyan jövőbeli dátumokkal is rangsorolva lehet az elemeket, mint a naptári események, így a jelenlegihez közelebbi elemek magasabbra rangsorolva, mint a jövőbeliek.

Az aktuális szolgáltatás kiadásában a tartomány egyik vége az aktuális időpontra lesz rögzítve. A másik vége egy múltbeli időpont a boostingDuration alapján. Egy jövőbeli időtartományt negatív boostingDuration értékkel növelheti.

A kiemelés maximális és minimális tartományról való változásának sebességét a pontozási profilra alkalmazott interpoláció határozza meg (lásd az alábbi ábrán). Az alkalmazott növekedési tényező megfordítása érdekében válasszon egy 1-esnél kisebb növekedési tényezőt.
A függvények > a frissesség > növeléseDurálás Beállít egy lejárati időszakot, amely után a kiemelés egy adott dokumentumnál leáll. Szintaxist és példákat a következő szakaszban, a BoostingDuration beállítása című szakaszban talál.
a > távolság A távolságpontozási függvény a dokumentumok pontszámának a referencia földrajzi helyhez viszonyított viszonya alapján befolyásolja a pontszámokat. A referenciahely a lekérdezés részeként van megadva egy paraméterben (a scoringParameter lekérdezési paraméter használatával) lon,lat argumentumként.
a referencePointParameter > távolságát > függvények Egy paraméter, amely referenciahelyként (a scoringParameter lekérdezési paraméter használatával) lesz átadva a lekérdezésekben. A lekérdezési paraméterek leírását a Dokumentumok keresése (REST API) leírásában láthatja.
függvények > távolság > növeléseDistance Egy szám, amely azt jelzi, hogy a távolság néhány kilométerre van attól a referenciahelytől, ahol a növelő tartomány véget ér.
függvények > címkével A címkepontozási függvény a dokumentumokban és a keresési lekérdezésekben használt címkék alapján befolyásolja a dokumentumok pontszámát. Azok a dokumentumok, amelyek a keresési lekérdezéssel közös címkékkel vannak, ki lesznek gyorsulva. A keresési lekérdezés címkéi pontozási paraméterként vannak megadva minden keresési kérelemben (a scoringParameter lekérdezési paraméter használatával).
címkék > címkék > függvényekParaméter Egy paraméter, amely a lekérdezésekben lesz átadva egy adott kérelem címkéinek megadásához (a scoringParameter lekérdezési paraméter használatával). A lekérdezési paraméterek leírását a Dokumentumok keresése (REST API) leírásában láthatja.
functionAggregation > functionAggregation függvények Választható. Csak függvények megszava esetén érvényes. Az érvényes értékek a következők: összeg (alapértelmezett), átlag, minimum, maximum és firstMatching. A keresési pontszám egyetlen érték, amely több változóból, köztük több függvényből van kiszámítva. Ez az attribútum azt jelzi, hogy az összes függvény növelései hogyan vannak egyesítve egyetlen összesített kiemeléssel, amely ezután alkalmazva lesz az alapdokumentum pontszámára. Az alappontszám a dokumentumból és a keresési lekérdezésből kiszámított tf-idf értéken alapul.
defaultScoringProfile Keresési kérés végrehajtásakor, ha nincs megadva pontozási profil, akkor a rendszer az alapértelmezett pontozást használja (csaktf-idf esetén).

Felülbírálhatja a beépített alapértelmezett beállítást, és egyéni profilt használhat, ha a keresési kérelemben nincs megadva konkrét profil.

Interpolációk beállítása

Az interpolációk lehetővé teszik a pontozáshoz használt meredekség alakjának beállítását. Mivel a pontozás magastól alacsonyig mutat, a meredekség mindig csökken, de az interpoláció határozza meg a lefelé irányuló meredekség görbét. A következő interpolációk használhatók:

Interpoláció Description
linear A maximális és minimális tartományba esik elemeknél az elemre alkalmazott növekedés folyamatosan csökkenő mennyiségben lesz alkalmazva. A lineáris a pontozási profil alapértelmezett interpolációja.
constant A kezdő- és zárótartományon belüli elemeknél a rangsoreredmények állandó növekedéssel lesznek alkalmazva.
quadratic A lineáris interpolációhoz képest, amely folyamatosan csökken, a Quadratic kezdetben kisebb ütemben csökken, majd a záró tartományhoz közeledve sokkal nagyobb időintervallumban csökken. Ez az interpolációs beállítás nem engedélyezett a címkepontozási függvények esetén.
logarithmic A lineáris interpolációhoz képest, amely folyamatosan csökken, a Logaritmikus érték kezdetben nagyobb ütemben csökken, majd a záró tartományhoz közeledve sokkal kisebb időközönként csökken. Ez az interpolációs beállítás nem engedélyezett a címkepontozási függvények esetén.

Állandó, lineáris, másodfokú, log10-vonalak a gráfon

A boostingDuration beállítása

boostingDuration A a függvény freshness attribútuma. Ezzel állíthat be lejárati időszakot, amely után egy adott dokumentumra vonatkozóan a kiemelés leáll. Ha például egy 10 napos promóciós időszakra szeretne kiemelni egy terméksort vagy márkát, a 10 napos időszakot "P10D" értékkel kell megadnia ezekhez a dokumentumokhoz.

boostingDuration XSD "dayTimeDuration" értékként kell formázni (az ISO 8601 időtartamérték korlátozott részkészleteként). Ennek mintája: "P[nD][T[nH][nM][nS]]".

Az alábbi táblázat néhány példát mutat be.

Időtartam boostingDuration
1 nap "P1D"
2 nap és 12 óra "P2DT12H"
15 perc "PT15M"
30 nap, 5 óra, 10 perc és 6,334 másodperc "P30DT5H10M6.334S"

További példákért lásd: XML-séma: Adattípusok (W3.org webhely).

Lásd még