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).

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 searchhaszná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 "
        }
    },
...

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: