Példák "egyszerű" keresési lekérdezésekre az Azure AI Searchben
Az Azure AI Searchben az egyszerű lekérdezési szintaxis meghívja az alapértelmezett lekérdezéselemzőt a teljes szöveges kereséshez. Az elemző gyors, és kezeli a gyakori forgatókönyveket, beleértve a teljes szöveges keresést, a szűrt és a faceted keresést, valamint az előtagkeresést. Ez a cikk példákkal szemlélteti a keresési dokumentumok (REST API) kéréseinek egyszerű szintaxishasználatát.
Feljegyzés
Egy másik lekérdezési szintaxis a Full Lucene, amely összetettebb lekérdezési struktúrákat támogat, például homályos és helyettesítő lekérdezéseket. További információkért és példákért lásd : A teljes Lucene szintaxis használata.
Hotelek mintaindexe
A következő lekérdezések a hotels-sample-indexen alapulnak, amelyeket az ebben a rövid útmutatóban található utasítások követésével hozhat létre.
A példa-lekérdezések a REST API és a POST kérések használatával vannak tagoltan. Beillesztheti és futtathatja őket egy REST-ügyfélben. Vagy használja a Search Explorer JSON-nézetét az Azure Portalon. JSON nézetben beillesztheti a cikkben bemutatott lekérdezési példákat.
A kérelemfejléceknek a következő értékekkel kell rendelkezniük:
Kulcs | Érték |
---|---|
Content-Type | application/json |
api-key | <your-search-service-api-key> , lekérdezés vagy rendszergazdai kulcs |
Az URI-paramétereknek tartalmazniuk kell a keresési szolgáltatás végpontját az index nevével, a dokumentumgyűjteményekkel, a keresési paranccsal és az API-verzióval, az alábbi példához hasonlóan:
https://{{service-name}}.search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2023-11-01
A kérelem törzsének érvényes JSON-ként kell létrejönnie:
{
"search": "*",
"queryType": "simple",
"select": "HotelId, HotelName, Category, Tags, Description",
"count": true
}
A "keresés" egy
*
meghatározatlan lekérdezés, amely null értékű vagy üres keresésnek felel meg. Ez nem különösen hasznos, de ez a legegyszerűbben elvégezhető keresés, és az index összes beolvasható mezőjét megjeleníti az összes értékkel együtt.Az "egyszerű" értékre beállított "queryType" az alapértelmezett érték, amely kihagyható, de a cikkben szereplő lekérdezési példákat tovább erősíti az egyszerű szintaxis.
A "select" vesszővel tagolt mezőlistára van állítva a keresési eredmények összetételéhez, beleértve a keresési eredmények kontextusában hasznos mezőket is.
A "count" a keresési feltételeknek megfelelő dokumentumok számát adja vissza. Üres keresési sztring esetén a szám az index összes dokumentuma (50 a hotels-sample-indexben).
1. példa: Teljes szöveges keresés
A teljes szöveges keresés tetszőleges számú önálló kifejezésből vagy idézőjelből álló kifejezés lehet logikai operátorokkal vagy anélkül.
POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
"search": "pool spa +airport",
"searchMode": "any",
"queryType": "simple",
"select": "HotelId, HotelName, Category, Description",
"count": true
}
A fontos kifejezésekből vagy kifejezésekből álló kulcsszókeresés általában a legjobban működik. A sztringmezők az indexelés és a lekérdezés során szövegelemzésen mennek keresztül, és olyan nem fontos szavakat ejtenek el, mint a "the", "and", "it". Annak megtekintéséhez, hogy egy lekérdezési sztring hogyan van tokenizálva az indexben, adja át a sztringet egy Szövegelemzési hívásban az indexnek.
A "searchMode" paraméter vezérli a pontosságot és a visszahívást. Ha további visszahívásra van szüksége, használja az alapértelmezett "bármely" értéket, amely eredményt ad vissza, ha a lekérdezési sztring bármely része megfeleltetve van. Ha a pontosságot részesíti előnyben, ahol a sztring minden részének egyeznie kell, módosítsa a searchMode értékét "mind" értékre. A fenti lekérdezéssel mindkét módon ellenőrizheti, hogy a searchMode hogyan módosítja az eredményt.
A "pool spa +airport" lekérdezésre adott válasznak a következő példához hasonlóan kell kinéznie, a rövidség kedvéért vágva.
"@odata.count": 6,
"value": [
{
"@search.score": 7.3617697,
"HotelId": "21",
"HotelName": "Nova Hotel & Spa",
"Description": "1 Mile from the airport. Free WiFi, Outdoor Pool, Complimentary Airport Shuttle, 6 miles from the beach & 10 miles from downtown.",
"Category": "Resort and Spa",
"Tags": [
"pool",
"continental breakfast",
"free parking"
]
},
{
"@search.score": 2.5560288,
"HotelId": "25",
"HotelName": "Scottish Inn",
"Description": "Newly Redesigned Rooms & airport shuttle. Minutes from the airport, enjoy lakeside amenities, a resort-style pool & stylish new guestrooms with Internet TVs.",
"Category": "Luxury",
"Tags": [
"24-hour front desk service",
"continental breakfast",
"free wifi"
]
},
{
"@search.score": 2.2988036,
"HotelId": "35",
"HotelName": "Suites At Bellevue Square",
"Description": "Luxury at the mall. Located across the street from the Light Rail to downtown. Free shuttle to the mall and airport.",
"Category": "Resort and Spa",
"Tags": [
"continental breakfast",
"air conditioning",
"24-hour front desk service"
]
}
]
Figyelje meg a keresési pontszámot a válaszban. Ez a találat relevanciapontszáma. A keresési szolgáltatás alapértelmezés szerint a pontszám alapján adja vissza az 50 legjobb találatot.
Az "1.0" egységes pontszáma akkor fordul elő, ha nincs rangsor, vagy azért, mert a keresés nem volt teljes szöveges keresés, vagy mert nem adtak meg feltételeket. Például egy üres keresésben (search=*
) a sorok tetszőleges sorrendben térnek vissza. Ha tényleges feltételeket ad meg, a keresési pontszámok értelmes értékekké alakulnak.
2. példa: Keresés azonosító alapján
Amikor keresési eredményeket ad vissza egy lekérdezésben, a következő logikus lépés egy olyan részletes lap megadása, amely több mezőt tartalmaz a dokumentumból. Ez a példa bemutatja, hogyan adhat vissza egyetlen dokumentumot keresési dokumentum használatával a dokumentumazonosító megadásával.
GET /indexes/hotels-sample-index/docs/41?api-version=2023-11-01
Minden dokumentum egyedi azonosítóval rendelkezik. Ha a portált használja, jelölje ki az indexet az Indexek lapon, majd tekintse meg a meződefiníciókat annak meghatározásához, hogy melyik mező a kulcs. A REST használatával az Index lekérése hívás visszaadja az indexdefiníciót a válasz törzsében.
A fenti lekérdezésre adott válasz az a dokumentum, amelynek kulcsa 41. Az indexdefinícióban "lekérdezhetőként" megjelölt mezők a keresési eredményekben visszaadhatók, és megjeleníthetők az alkalmazásban.
{
"HotelId": "41",
"HotelName": "Ocean Air Motel",
"Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Various shops and art entertainment are on the boardwalk, just steps away.",
"Description_fr": "L'hôtel front de mer surplombant la plage dispose de chambres avec balcon privé et 2 piscines intérieures et extérieures. Divers commerces et animations artistiques sont sur la promenade, à quelques pas.",
"Category": "Budget",
"Tags": [
"pool",
"air conditioning",
"bar"
],
"ParkingIncluded": true,
"LastRenovationDate": "1951-05-10T00:00:00Z",
"Rating": 3.5,
"Location": {
"type": "Point",
"coordinates": [
-157.846817,
21.295841
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
"Address": {
"StreetAddress": "1450 Ala Moana Blvd 2238 Ala Moana Ctr",
"City": "Honolulu",
"StateProvince": "HI",
"PostalCode": "96814",
"Country": "USA"
}
}
3. példa: Szűrés szövegre
A szűrőszintaxis egy olyan OData-kifejezés, amelyet önmagában vagy a search
használatával is használhat. Az együttes filter
használat először a teljes indexre vonatkozik, majd a keresés a szűrő eredményein történik. A szűrők éppen ezért hasznosak a lekérdezés teljesítményének javítására, mivel általuk lecsökkenthető a keresési lekérdezés által feldolgozandó dokumentumok köre.
A szűrők az indexdefinícióban megjelölt filterable
bármely mezőn definiálhatók. A szállodai mintaindex esetében a szűrhető mezők közé tartozik a Kategória, a Címkék, a Parkolási cím, az Értékelés és a legtöbb Cím mező.
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "art tours",
"queryType": "simple",
"filter": "Category eq 'Resort and Spa'",
"searchFields": "HotelName,Description,Category",
"select": "HotelId,HotelName,Description,Category",
"count": true
}
A fenti lekérdezésre adott válasz csak azokra a szállodákra terjed ki, amelyek "Jelentés és Spa" kategóriába vannak sorolva, és amelyek tartalmazzák a "art" vagy a "tours" kifejezéseket. Ebben az esetben csak egy egyezés van.
{
"@search.score": 2.8576312,
"HotelId": "31",
"HotelName": "Santa Fe Stay",
"Description": "Nestled on six beautifully landscaped acres, located 2 blocks from the Plaza. Unwind at the spa and indulge in art tours on site.",
"Category": "Resort and Spa"
}
4. példa: Szűrőfüggvények
A szűrőkifejezések tartalmazhatnak "search.ismatch" és "search.ismatchscoring" függvényeket, így létrehozhat egy keresési lekérdezést a szűrőn belül. Ez a szűrőkifejezés ingyenes helyettesítő karaktert használ a kényelmi funkciók kiválasztásához, beleértve az ingyenes wifit, az ingyenes parkolást és így tovább.
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "",
"filter": "search.ismatch('free*', 'Tags', 'full', 'any')",
"select": "HotelId, HotelName, Category, Description",
"count": true
}
A fenti lekérdezési találatokra adott válasz 19 szállodában található, amelyek ingyenes szolgáltatásokat kínálnak. Figyelje meg, hogy a keresési pontszám egységes "1.0" a találatok között. Ennek az az oka, hogy a keresési kifejezés null értékű vagy üres, ami szó szerinti szűrési egyezéseket eredményez, de nem tartalmaz teljes szöveges keresést. A relevanciaértékek csak teljes szöveges kereséssel jelennek meg. Ha szűrőket használ nélküle search
, győződjön meg arról, hogy elegendő rendezhető mezővel rendelkezik, hogy szabályozhassa a keresési rangsort.
"@odata.count": 19,
"value": [
{
"@search.score": 1.0,
"HotelId": "31",
"HotelName": "Santa Fe Stay",
"Tags": [
"view",
"restaurant",
"free parking"
]
},
{
"@search.score": 1.0,
"HotelId": "27",
"HotelName": "Super Deluxe Inn & Suites",
"Tags": [
"bar",
"free wifi"
]
},
{
"@search.score": 1.0,
"HotelId": "39",
"HotelName": "Whitefish Lodge & Suites",
"Tags": [
"continental breakfast",
"free parking",
"free wifi"
]
},
{
"@search.score": 1.0,
"HotelId": "11",
"HotelName": "Regal Orb Resort & Spa",
"Tags": [
"free wifi",
"restaurant",
"24-hour front desk service"
]
},
5. példa: Tartományszűrők
A tartományszűrés bármilyen adattípus szűrőkifejezéseivel támogatott. Az alábbi példák numerikus és sztringtartományokat szemléltetnek. Az adattípusok fontosak a tartományszűrőkben, és akkor működnek a legjobban, ha numerikus adatok numerikus mezőkben, sztringadatok pedig sztringmezőkben találhatók. A sztringmezők numerikus adatai nem alkalmasak tartományokra, mert a numerikus sztringek nem összehasonlíthatók.
Az alábbi lekérdezés egy numerikus tartomány. A hotels-sample-indexben az egyetlen szűrhető numerikus mező a Minősítés.
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "*",
"filter": "Rating ge 2 and Rating lt 4",
"select": "HotelId, HotelName, Rating",
"orderby": "Rating desc",
"count": true
}
A lekérdezésre adott válasznak a következő példához hasonlóan kell kinéznie, a rövidség kedvéért levágva.
"@odata.count": 27,
"value": [
{
"@search.score": 1.0,
"HotelId": "22",
"HotelName": "Stone Lion Inn",
"Rating": 3.9
},
{
"@search.score": 1.0,
"HotelId": "25",
"HotelName": "Scottish Inn",
"Rating": 3.8
},
{
"@search.score": 1.0,
"HotelId": "2",
"HotelName": "Twin Dome Motel",
"Rating": 3.6
}
...
A következő lekérdezés egy tartományszűrő egy sztringmezőn (Address/StateProvince):
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "*",
"filter": "Address/StateProvince ge 'A*' and Address/StateProvince lt 'D*'",
"select": "HotelId, HotelName, Address/StateProvince",
"count": true
}
A lekérdezésre adott válasznak az alábbi példához hasonlóan kell kinéznie, a rövidség kedvéért levágva. Ebben a példában nem lehet StateProvince szerint rendezni, mert a mező nem "rendezhető" az indexdefinícióban.
"@odata.count": 9,
"value": [
{
"@search.score": 1.0,
"HotelId": "9",
"HotelName": "Smile Hotel",
"Address": {
"StateProvince": "CA "
}
},
{
"@search.score": 1.0,
"HotelId": "39",
"HotelName": "Whitefish Lodge & Suites",
"Address": {
"StateProvince": "CO"
}
},
{
"@search.score": 1.0,
"HotelId": "7",
"HotelName": "Countryside Resort",
"Address": {
"StateProvince": "CA "
}
},
...
6. példa: Térinformatikai keresés
A szállodai mintaindex tartalmaz egy földrajzi szélességi és hosszúsági koordinátákat tartalmazó Hely mezőt. Ez a példa a geo.distance függvényt használja, amely a kiindulási pont kerületén belül szűri a dokumentumokat, egy tetszőleges távolságra (kilométerben), amelyet ön ad meg. A lekérdezés utolsó értékét (10) módosíthatja a lekérdezés felületének csökkentése vagy nagyítása érdekében.
POST /indexes/v/docs/search?api-version=2023-11-01
{
"search": "*",
"filter": "geo.distance(Location, geography'POINT(-122.335114 47.612839)') le 10",
"select": "HotelId, HotelName, Address/City, Address/StateProvince",
"count": true
}
A lekérdezésre adott válasz az összes szállodát a megadott koordináták 10 km-es távolságán belül adja vissza:
{
"@odata.count": 3,
"value": [
{
"@search.score": 1.0,
"HotelId": "45",
"HotelName": "Arcadia Resort & Restaurant",
"Address": {
"City": "Seattle",
"StateProvince": "WA"
}
},
{
"@search.score": 1.0,
"HotelId": "24",
"HotelName": "Gacc Capital",
"Address": {
"City": "Seattle",
"StateProvince": "WA"
}
},
{
"@search.score": 1.0,
"HotelId": "16",
"HotelName": "Double Sanctuary Resort",
"Address": {
"City": "Seattle",
"StateProvince": "WA"
}
}
]
}
7. példa: Logikai értékek a searchMode használatával
Az egyszerű szintaxis karakterek (+, -, |
) formájában támogatja a logikai operátorokat az AND, OR és NOT lekérdezési logika támogatásához. A logikai keresés a várt módon viselkedik, néhány figyelemre méltó kivétellel.
A korábbi példákban a paraméter a searchMode
pontosság és a visszahívás befolyásolására szolgáló mechanizmusként lett bevezetve, "searchMode": "any"
előnyben részesítve a visszahívást (a feltételnek megfelelő dokumentumot egyezésnek tekintik), és a "searchMode=all" a pontosságot előnyben részesítő (minden feltételnek meg kell egyeznie egy dokumentumban).
A logikai keresés kontextusában az alapértelmezett beállítás "searchMode": "any"
zavaró lehet, ha egy lekérdezést több operátorral halmoz fel, és a szűkebb eredmények helyett szélesebb lesz. Ez különösen igaz a NOT esetében, ahol az eredmények tartalmazzák az összes olyan dokumentumot, amely "nem tartalmaz" egy adott kifejezést vagy kifejezést.
Az alábbi példa egy illusztrációt tartalmaz. A következő lekérdezés searchMode -val (bármely) való futtatásával 42 dokumentumot ad vissza: az "étterem" kifejezést tartalmazó dokumentumokat, valamint az összes olyan dokumentumot, amely nem rendelkezik a "légkondicionáló" kifejezéssel.
Figyelje meg, hogy nincs térköz a logikai operátor (-
) és a "légkondicionáló" kifejezés között.
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "restaurant -\"air conditioning\"",
"searchMode": "any",
"searchFields": "Tags",
"select": "HotelId, HotelName, Tags",
"count": true
}
"searchMode": "all"
A módosítás kumulatív hatást gyakorol a feltételekre, és egy kisebb eredményhalmazt (7 találatot) ad vissza, amely az "étterem" kifejezést tartalmazó dokumentumokból áll, a "légkondicionáló" kifejezést tartalmazók nélkül.
A lekérdezésre adott válasz most az alábbi példához hasonlóan fog kinézni, a rövidség kedvéért levágva.
"@odata.count": 7,
"value": [
{
"@search.score": 2.5460577,
"HotelId": "11",
"HotelName": "Regal Orb Resort & Spa",
"Tags": [
"free wifi",
"restaurant",
"24-hour front desk service"
]
},
{
"@search.score": 2.166792,
"HotelId": "10",
"HotelName": "Countryside Hotel",
"Tags": [
"24-hour front desk service",
"coffee in lobby",
"restaurant"
]
},
...
8. példa: Lapozási eredmények
A korábbi példákban megismerhette a keresési eredmények összetételét befolyásoló paramétereket, többek között select
azt, hogy mely mezők szerepelnek az eredményben, hogyan rendezheti a sorrendeket, és hogyan lehet belefoglalni az összes találat számát. Ez a példa a keresési eredmények összetételének folytatása lapozási paraméterek formájában, amelyek lehetővé teszik, hogy az adott oldalon megjelenő találatok számát kötegelje.
Alapértelmezés szerint a keresési szolgáltatás az első 50 találatot adja vissza. Az egyes lapok top
egyezéseinek számának szabályozásához határozza meg a köteg méretét, majd vegye skip
fel a további kötegeket.
Az alábbi példa egy szűrési és rendezési sorrendet használ az Értékelés mezőben (az értékelés szűrhető és rendezhető is), mert könnyebb látni a lapozásnak a rendezett eredményekre gyakorolt hatását. Egy normál teljes keresési lekérdezésben a rendszer a legfontosabb találatokat rangsorolja és lapozza @search.score
.
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "*",
"filter": "Rating gt 4",
"select": "HotelName, Rating",
"orderby": "Rating desc",
"top": "5",
"count": true
}
A lekérdezés 21 egyező dokumentumot talál, de mivel megadta top
, a válasz csak az első öt találatot adja vissza, a minősítések 4,9-nél kezdődnek, és 4,7-nél végződnek a "B- tó hölgye" kifejezéssel.
A következő 5 lekéréséhez hagyja ki az első köteget:
POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
"search": "*",
"filter": "Rating gt 4",
"select": "HotelName, Rating",
"orderby": "Rating desc",
"top": "5",
"skip": "5",
"count": true
}
A második köteg válasza kihagyja az első öt találatot, és a következő öt találatot adja vissza, kezdve a "Pull'r Inn Motel" kifejezéssel. Ha további kötegeket szeretne folytatni, akkor 5-nél kell tartania top
, majd minden új kérésnél 5-gyel kell növelnie skip
a műveletet (skip=5, skip=10, skip=15 stb.).
"value": [
{
"@search.score": 1.0,
"HotelName": "Pull'r Inn Motel",
"Rating": 4.7
},
{
"@search.score": 1.0,
"HotelName": "Sublime Cliff Hotel",
"Rating": 4.6
},
{
"@search.score": 1.0,
"HotelName": "Antiquity Hotel",
"Rating": 4.5
},
{
"@search.score": 1.0,
"HotelName": "Nordick's Motel",
"Rating": 4.5
},
{
"@search.score": 1.0,
"HotelName": "Winter Panorama Resort",
"Rating": 4.5
}
]
Következő lépések
Most, hogy már rendelkezik némi gyakorlattal az alapszintű lekérdezési szintaxissal, próbálja meg kódban megadni a lekérdezéseket. Az alábbi hivatkozás bemutatja, hogyan állíthat be keresési lekérdezéseket az Azure SDK-k használatával.
További szintaxishivatkozások, lekérdezési architektúra és példák az alábbi hivatkozásokon találhatók: