Rövid útmutató: Keresési index létrehozása a PowerShellben REST API-k használatával
Ebben az Azure AI Search rövid útmutatójában megtudhatja, hogyan hozhat létre, tölthet be és kérdezhet le keresési indexeket a PowerShell és az Azure AI Search REST API-k használatával. Ez a cikk a PowerShell-parancsok interaktív futtatását ismerteti. Másik lehetőségként letölthet és futtathat egy PowerShell-szkriptet , amely ugyanazokat a műveleteket hajtja végre.
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Előfeltételek
Ehhez a rövid útmutatóhoz a következő szolgáltatásokra és eszközökre van szükség:
- A PowerShell 7.3-as vagy újabb verziója az Invoke-RestMethod használatával szekvenciális és interaktív lépésekhez.
- Hozzon létre egy Azure AI-Search szolgáltatás, vagy keressen egy meglévő szolgáltatást az aktuális előfizetésében. Ehhez a rövid útmutatóhoz ingyenes szolgáltatást használhat.
Keresési szolgáltatáskulcs és URL-cím másolása
Ebben a rövid útmutatóban a REST-hívások tartalmazzák a szolgáltatás URL-címét és egy hozzáférési kulcsot minden kéréshez. Mindkét szolgáltatással létrejön egy keresési szolgáltatás, ezért ha hozzáadta az Azure AI Search szolgáltatást az előfizetéséhez, az alábbi lépésekkel szerezheti be a szükséges információkat.
Jelentkezzen be az Azure Portalra. A keresési szolgáltatás áttekintési lapján kérje le az URL-címet. A végpontok például a következőképpen nézhetnek ki:
https://mydemo.search.windows.net
.Válassza a Beállításkulcsok>lehetőséget, majd kérje le a teljes jogokat a szolgáltatáshoz. Két felcserélhető rendszergazdai kulcs áll rendelkezésre az üzletmenet folytonosságához, ha át kell gördítenie egyet. Az elsődleges vagy a másodlagos kulcsot használhatja objektumok hozzáadására, módosítására és törlésére vonatkozó kérelmekhez.
Minden kéréshez api-kulcs szükséges a szolgáltatásnak küldött összes kérelemhez. Az érvényes kulcs kérésenként megbízhatóságot hoz létre a kérelmet küldő alkalmazás és az azt kezelő szolgáltatás között.
Csatlakozás az Azure AI Search szolgáltatáshoz
A PowerShellben hozzon létre egy
$headers
objektumot a tartalomtípus és az API-kulcs tárolásához. Cserélje le a rendszergazdai API-kulcsot (YOUR-ADMIN-API-KEY
) a keresési szolgáltatásra érvényes kulcsra. Ezt a fejlécet csak egyszer kell beállítania a munkamenet idejére, de minden kéréshez hozzá kell adnia.$headers = @{ 'api-key' = '<YOUR-ADMIN-API-KEY>' 'Content-Type' = 'application/json' 'Accept' = 'application/json' }
Hozzon létre egy
$url
objektumot, amely meghatározza a szolgáltatás indexgyűjteményét. Cserélje le a szolgáltatásnevet (YOUR-SEARCH-SERVICE-NAME
) egy érvényes keresési szolgáltatásra.$url = "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes?api-version=2024-07-01&`$select=name"
Futtassa
Invoke-RestMethod
a GET kérés küldését a szolgáltatásnak, és ellenőrizze a kapcsolatot. Adja hozzáConvertTo-Json
, hogy megtekinthesse a szolgáltatásból visszaküldött válaszokat.Invoke-RestMethod -Uri $url -Headers $headers | ConvertTo-Json
Ha a szolgáltatás üres, és nincs indexe, az eredmények hasonlóak az alábbi példához. Ellenkező esetben az indexdefiníciók JSON-ábrázolása jelenik meg.
{ "@odata.context": "https://mydemo.search.windows.net/$metadata#indexes", "value": [ ] }
Index létrehozása
Ha nem használja a portált, az adatok betöltése előtt indexnek kell lennie a szolgáltatásban. Ez a lépés határozza meg az indexet, és leküldi a szolgáltatásba. Ehhez a lépéshez az Index létrehozása REST API-t használjuk.
Az index kötelező elemei közé tartozik egy név és egy mezőgyűjtemény. A mezők gyűjteménye határozza meg a dokumentum struktúráját. Minden mezőnek van egy neve, típusa és attribútuma, amely meghatározza a használat módját (például hogy teljes szöveges kereshető, szűrhető vagy lekérdezhető-e a keresési eredményekben). Egy indexen belül a típusmezők Edm.String
egyikét meg kell jelölni a dokumentumdentitás kulcsának .
Az index neve hotels-quickstart
és meződefiníciói az alábbi kódban láthatók. Ez egy nagyobb hotels index részhalmaza, amelyet más útmutató cikkekben használnak. A meződefiníciókat ebben a rövid útmutatóban vágja le a rendszer a rövidítés érdekében.
Illessze be ezt a példát a PowerShellbe az
$body
indexsémát tartalmazó objektum létrehozásához.$body = @" { "name": "hotels-quickstart", "fields": [ {"name": "HotelId", "type": "Edm.String", "key": true, "filterable": true}, {"name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false}, {"name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene"}, {"name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true}, {"name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true}, {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true}, {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true}, {"name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true}, {"name": "Address", "type": "Edm.ComplexType", "fields": [ {"name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true}, {"name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true}, {"name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true}, {"name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true}, {"name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true} ] } ] } "@
Állítsa az URI-t a szolgáltatás és az index indexgyűjteményére
hotels-quickstart
.$url = "https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart?api-version=2024-07-01"
Futtassa a parancsot a ,
$headers
paranccsal$url
, és$body
hozza létre az indexet a szolgáltatásban.Invoke-RestMethod -Uri $url -Headers $headers -Method Put -Body $body | ConvertTo-Json
Az eredményeknek a példához hasonlóan kell kinéznie, amely csak az első két mezőt jeleníti meg a rövidség kedvéért:
{ "@odata.context": "https://mydemo.search.windows.net/$metadata#indexes/$entity", "@odata.etag": "\"0x8D6EDE28CFEABDA\"", "name": "hotels-quickstart", "defaultScoringProfile": null, "fields": [ { "name": "HotelId", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true, "key": true, "indexAnalyzer": null, "searchAnalyzer": null, "analyzer": null, "synonymMaps": "" }, { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": true, "facetable": false, "key": false, "indexAnalyzer": null, "searchAnalyzer": null, "analyzer": null, "synonymMaps": "" }, . . . ] }
Tipp.
Az ellenőrzéshez az Indexek listát is ellenőrizheti a portálon.
Dokumentumok betöltése
Dokumentumok leküldéséhez használjon HTTP POST-kérést az index URL-végpontjára. A feladat REST API-ja az Indexdokumentumok.
Illessze be ezt a példát a PowerShellbe, és hozzon létre egy
$body
objektumot, amely tartalmazza a feltölteni kívánt dokumentumokat.Ez a kérés két teljes rekordot és egy részleges rekordot tartalmaz. A részleges rekord azt mutatja, hogy hiányos dokumentumokat tölthet fel. A
@search.action
paraméter az indexelés módját határozza meg. Az érvényes értékek a következők:upload
,merge
,mergeOrUpload
ésdelete
. AmergeOrUpload
viselkedés vagy létrehoz egy új dokumentumot,hotelId = 3
vagy frissíti a tartalmat, ha már létezik.$body = @" { "value": [ { "@search.action": "upload", "HotelId": "1", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", "Category": "Boutique", "Tags": [ "pool", "air conditioning", "concierge" ], "ParkingIncluded": false, "LastRenovationDate": "1970-01-18T00:00:00Z", "Rating": 3.60, "Address": { "StreetAddress": "677 5th Ave", "City": "New York", "StateProvince": "NY", "PostalCode": "10022", "Country": "USA" } }, { "@search.action": "upload", "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Category": "Boutique", "Tags": [ "pool", "free wifi", "concierge" ], "ParkingIncluded": false, "LastRenovationDate": "1979-02-18T00:00:00Z", "Rating": 3.60, "Address": { "StreetAddress": "140 University Town Center Dr", "City": "Sarasota", "StateProvince": "FL", "PostalCode": "34243", "Country": "USA" } }, { "@search.action": "upload", "HotelId": "3", "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.", "Category": "Resort and Spa", "Tags": [ "air conditioning", "bar", "continental breakfast" ], "ParkingIncluded": true, "LastRenovationDate": "2015-09-20T00:00:00Z", "Rating": 4.80, "Address": { "StreetAddress": "3393 Peachtree Rd", "City": "Atlanta", "StateProvince": "GA", "PostalCode": "30326", "Country": "USA" } }, { "@search.action": "upload", "HotelId": "4", "HotelName": "Sublime Palace Hotel", "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace.", "Category": "Boutique", "Tags": [ "concierge", "view", "24-hour front desk service" ], "ParkingIncluded": true, "LastRenovationDate": "1960-02-06T00:00:00Z", "Rating": 4.60, "Address": { "StreetAddress": "7400 San Pedro Ave", "City": "San Antonio", "StateProvince": "TX", "PostalCode": "78216", "Country": "USA" } } ] } "@
Állítsa a végpontot a
hotels-quickstart
dokumentumgyűjteményre, és adja meg az indexműveletet (indexes/hotels-quickstart/docs/index
).$url = "https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs/index?api-version=2024-07-01"
Futtassa a parancsot az , paranccsal
$url
, és$body
töltse be a dokumentumokat azhotels-quickstart
indexbe.$headers
Invoke-RestMethod -Uri $url -Headers $headers -Method Post -Body $body | ConvertTo-Json
Az eredményeknek az alábbi példához hasonlóan kell kinéznie. Ekkor megjelenik egy 201-ből álló állapotkód.
{ "@odata.context": "https://mydemo.search.windows.net/indexes(\u0027hotels-quickstart\u0027)/$metadata#Collection(Microsoft.Azure.Search.V2019_05_06.IndexResult)", "value": [ { "key": "1", "status": true, "errorMessage": null, "statusCode": 201 }, { "key": "2", "status": true, "errorMessage": null, "statusCode": 201 }, { "key": "3", "status": true, "errorMessage": null, "statusCode": 201 }, { "key": "4", "status": true, "errorMessage": null, "statusCode": 201 } ] }
Keresés az indexekben
Ez a lépés bemutatja, hogyan kérdezhet le egy indexet a Search Documents API használatával.
A keresés $urls
során mindenképpen használjon egyetlen idézőjelet. A lekérdezési sztringek karaktereket tartalmaznak $
, és kihagyhatja, hogy ki kell őket lépnie, ha a teljes sztring egyetlen idézőjelek közé van zárva.
Állítsa a végpontot a
hotels-quickstart
dokumentumgyűjteményre, és adjon hozzá egysearch
paramétert, amely egy lekérdezési sztringet ad át.Ez a sztring egy üres keresést (
search=*
) hajt végre, amely tetszőleges dokumentumokból álló üres listát (keresési pontszám = 1,0) ad vissza. Az Azure AI Search alapértelmezés szerint egyszerre 50 találatot ad vissza. Strukturáltként ez a lekérdezés egy teljes dokumentumstruktúrát és értékeket ad vissza. Hozzáadás$count=true
az eredményekben szereplő összes dokumentum számának lekéréséhez.$url = 'https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs?api-version=2024-07-01&search=*&$count=true'
Futtassa a parancsot a
$url
szolgáltatásnak való küldéshez.Invoke-RestMethod -Uri $url -Headers $headers | ConvertTo-Json
Az eredményeknek az alábbi kimenethez hasonlóan kell kinéznie:
{ "@odata.context": "https://mydemo.search.windows.net/indexes(\u0027hotels-quickstart\u0027)/$metadata#docs(*)", "@odata.count": 4, "value": [ { "@search.score": 0.1547872, "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", "Category": "Boutique", "Tags": "pool free wifi concierge", "ParkingIncluded": false, "LastRenovationDate": "1979-02-18T00:00:00Z", "Rating": 3.6, "Address": "@{StreetAddress=140 University Town Center Dr; City=Sarasota; StateProvince=FL; PostalCode=34243; Country=USA}" }, { "@search.score": 0.009068266, "HotelId": "3", "HotelName": "Gastronomic Landscape Hotel", "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel\u0027s restaurant services.", "Category": "Resort and Spa", "Tags": "air conditioning bar continental breakfast", "ParkingIncluded": true, "LastRenovationDate": "2015-09-20T00:00:00Z", "Rating": 4.8, "Address": "@{StreetAddress=3393 Peachtree Rd; City=Atlanta; StateProvince=GA; PostalCode=30326; Country=USA}" }, . . . ] }
Próbálkozzon néhány további lekérdezési példával, hogy jobban érezze magát a szintaxisban. Sztringkeresést, szó szerinti $filter
lekérdezéseket végezhet, korlátozhatja a találatokat, hatókörbe helyezheti a keresést adott mezőkre stb.
# Query example 1
# Search the entire index for the terms 'restaurant' and 'wifi'
# Return only the HotelName, Description, and Tags fields
$url = 'https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs?api-version=2024-07-01&search=restaurant wifi&$count=true&$select=HotelName,Description,Tags'
# Query example 2
# Apply a filter to the index to find hotels rated 4 or higher
# Returns the HotelName and Rating. Two documents match.
$url = 'https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs?api-version=2024-07-01&search=*&$filter=Rating gt 4&$select=HotelName,Rating'
# Query example 3
# Take the top two results, and show only HotelName and Category in the results
$url = 'https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs?api-version=2024-07-01&search=boutique&$top=2&$select=HotelName,Category'
# Query example 4
# Sort by a specific field (Address/City) in ascending order
$url = 'https://<YOUR-SEARCH-SERVICE>.search.windows.net/indexes/hotels-quickstart/docs?api-version=2024-07-01&search=pool&$orderby=Address/City asc&$select=HotelName, Address/City, Tags, Rating'
Az erőforrások eltávolítása
Ha a saját előfizetésében dolgozik, érdemes az egyes projektek végén eldöntenie, hogy szüksége lesz-e még a létrehozott erőforrásokra. A továbbra is futó erőforrások költségekkel járhatnak. Az erőforrásokat törölheti egyesével, vagy az erőforráscsoport törlésével eltávolíthatja a benne lévő összes erőforrást is.
Az erőforrásokat a portálon a bal szélső panel Minden erőforrás vagy Erőforráscsoport hivatkozásával keresheti meg és kezelheti.
Ha ingyenes szolgáltatást használ, ne feledje, hogy három indexre, indexelőre és adatforrásra korlátozódik. A portálon törölheti az egyes elemeket, hogy a korlát alatt maradjon.
Következő lépések
Ebben a rövid útmutatóban a PowerShell használatával végigvezette az Azure AI Searchben található tartalom létrehozására és elérésére szolgáló alapvető munkafolyamaton. A fogalmakat szem előtt tartva javasoljuk, hogy lépjen tovább a fejlettebb forgatókönyvekre, például az Azure-adatforrásokból történő indexelésre: