Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk az örökölt Microsoft.Azure.Search (10-es verzió) ügyfélkódtár C# rövid útmutatója, amelyet most az Azure.Search.Documents (11-es verzió) ügyfélkódtár helyettesít.
Megjegyzés:
Ha már rendelkezik meglévő vagy nem működő fejlesztési projektel, továbbra is használhatja a 10-es verziót. Új projektek esetén, vagy új funkciók használatához azonban át kell váltania az új kódtárra.
A rövid útmutató ismertetése
Hozzon létre egy .NET Core-konzolalkalmazást c# nyelven, amely létrehoz, betölt és lekérdez egy Azure Cognitive Search-indexet a Visual Studio és a Microsoft.Azure.Search ügyfélkódtárak használatával.
Ez a cikk bemutatja, hogyan hozhatja létre az alkalmazást. A teljes alkalmazást is letöltheti és futtathatja.
Megjegyzés:
A cikkben szereplő demókód az Azure Cognitive Search 10.NET SDK-s verziójának szinkron metódusait használja az egyszerűség kedvéért. Éles helyzetekben azonban azt javasoljuk, hogy az aszinkron metódusokat használja a saját alkalmazásaiban, hogy skálázhatóak és rugalmasak maradjanak. Használhatja például és CreateAsyncDeleteAsync helyette Create és helyett.Delete
Előfeltételek
Mielőtt hozzákezdene, a következőkre van szüksége:
Egy Azure-fiók, aktív előfizetéssel. Fiók létrehozása ingyenes.
Egy Azure Cognitive Search-szolgáltatás. Hozzon létre egy szolgáltatást , vagy keressen egy meglévő szolgáltatást az aktuális előfizetése alatt. Ehhez a rövid útmutatóhoz ingyenes szolgáltatást használhat.
Visual Studio, bármilyen kiadás. A mintakódot és az utasításokat az ingyenes közösségi kiadásban teszteltük.
Kulcs és URL-cím lekérése
A szolgáltatáshoz való hívásokhoz minden kéréshez URL-végpontra és hozzáférési kulcsra van szükség. Mindkét szolgáltatással létrejön egy keresési szolgáltatás, ezért ha hozzáadta az Azure Cognitive Searcht az előfizetéséhez, kövesse az alábbi lépéseket a szükséges információk beszerzéséhez:
Jelentkezzen be az Azure Portalra, és 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.A Beállítások>Kulcsok menüben, szerezzen egy admin kulcsot a teljes jogosultságokhoz a szolgáltatásban. Két felcserélhető rendszergazdai kulcs áll rendelkezésre az üzletmenet folytonossága érdekében, 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.
Kérje le a lekérdezési kulcsot is. Ajánlott eljárás a lekérdezési kérelmek írásvédett hozzáféréssel történő végrehajtása.
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.
Saját környezet beállítása
Először nyissa meg a Visual Studio-t, és hozzon létre egy új konzolalkalmazás-projektet, amely a .NET Core-on futtatható.
NuGet-csomagok telepítése
A Microsoft.Azure.Search csomag néhány NuGet-csomagként elosztott ügyfélkódtárból áll.
Ehhez a projekthez használja a Microsoft.Azure.Search NuGet-csomag 10-es verzióját és a legújabb Microsoft.Extensions.Configuration.Json NuGet-csomagot.
A NuGet-Csomagkezelő eszközökben >válassza a Megoldáshoz készült NuGet-csomagok kezelése... lehetőséget.
Kattintson a Tallózás gombra.
Keresse meg és válassza ki a
Microsoft.Azure.Search10-es verziót.Kattintson a jobb oldali Telepítés gombra a szerelvény projekthez és megoldáshoz való hozzáadásához.
Ismételje meg a
Microsoft.Extensions.Configuration.Jsonszámára, és válassza a 2.2.0-s vagy újabb verziót.
Az Azure Cognitive Search szolgáltatás adatainak hozzáadása
A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza azÚj elemhozzáadása>... lehetőséget.
Az Új elem hozzáadása területen keressen rá a "JSON" kifejezésre az elemtípusok JSON-tal kapcsolatos listájának visszaadásához.
Válassza a JSON-fájl lehetőséget, adja a "appsettings.json" nevet a fájlnak, majd kattintson a Hozzáadás gombra.
Adja hozzá a fájlt a kimeneti könyvtárhoz. Kattintson a jobb gombbal a appsettings.json, és válassza a Tulajdonságok parancsot. A Másolás a kimeneti könyvtárba válassza a Másolás, ha újabb lehetőséget.
Másolja a következő JSON-fájlt az új JSON-fájlba.
{ "SearchServiceName": "<YOUR-SEARCH-SERVICE-NAME>", "SearchServiceAdminApiKey": "<YOUR-ADMIN-API-KEY>", "SearchIndexName": "hotels-quickstart" }Cserélje le a keresési szolgáltatás nevét (YOUR-SEARCH-SERVICE-NAME) és a rendszergazdai API-kulcsot (YOUR-ADMIN-API-KEY) érvényes értékekre. Ha a szolgáltatásvégpont az
https://mydemo.search.windows.net, a szolgáltatás neve "mydemo".
Adja hozzá a ".Method" fájlokat a projekthez
Erre a lépésre azért van szükség, hogy értelmes kimenetet állítsunk elő a konzolon. Amikor az eredményeket a konzolablakba nyomtatja, a Hotel objektum egyes mezőit sztringként kell visszaadni. Ez a lépés implementálja a ToString() metódust a feladat végrehajtásához, amelyet a szükséges kód két új fájlba való másolásával hajt végre.
Adjon hozzá két üres osztálydefiníciót a projekthez: Address.Methods.cs, Hotel.Methods.cs
A Address.Methods.cs írja felül az alapértelmezett tartalmat az alábbi kóddal, az 1–25. sorokkal.
A Hotel.Methods.cs másolja az 1–68. sorokat.
1 – Index létrehozása
A szállodaindex egyszerű és összetett mezőkből áll, ahol egy egyszerű mező a "HotelName" vagy a "Leírás", az összetett mezők pedig almezőkkel rendelkező címek vagy szobák gyűjteményei. Ha egy index összetett típusokat tartalmaz, külön osztályokban különítse el a komplex meződefiníciókat.
Adjon hozzá két üres osztálydefiníciót a projekthez: Address.cs, Hotel.cs
A Address.cs írja felül az alapértelmezett tartalmat a következő kóddal:
using System; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Newtonsoft.Json; namespace AzureSearchQuickstart { public partial class Address { [IsSearchable] public string StreetAddress { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string City { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string StateProvince { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string PostalCode { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string Country { get; set; } } }A Hotel.cs az osztály határozza meg az index általános szerkezetét, beleértve a címosztályra mutató hivatkozásokat is.
namespace AzureSearchQuickstart { using System; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Newtonsoft.Json; public partial class Hotel { [System.ComponentModel.DataAnnotations.Key] [IsFilterable] public string HotelId { get; set; } [IsSearchable, IsSortable] public string HotelName { get; set; } [IsSearchable] [Analyzer(AnalyzerName.AsString.EnMicrosoft)] public string Description { get; set; } [IsSearchable] [Analyzer(AnalyzerName.AsString.FrLucene)] [JsonProperty("Description_fr")] public string DescriptionFr { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string Category { get; set; } [IsSearchable, IsFilterable, IsFacetable] public string[] Tags { get; set; } [IsFilterable, IsSortable, IsFacetable] public bool? ParkingIncluded { get; set; } [IsFilterable, IsSortable, IsFacetable] public DateTimeOffset? LastRenovationDate { get; set; } [IsFilterable, IsSortable, IsFacetable] public double? Rating { get; set; } public Address Address { get; set; } } }A mező attribútumai határozzák meg, hogyan használják azt egy alkalmazásban. Az attribútumot például minden olyan mezőhöz hozzá kell rendelni,
IsSearchableamelyet teljes szöveges keresésnek kell tartalmaznia.Megjegyzés:
A .NET SDK-ban a mezőket explicit módon a következőképpen kell hozzárendelni
IsSearchable: ,IsFilterable,IsSortableésIsFacetable. Ez a viselkedés ellentétben áll a REST API-val, amely implicit módon engedélyezi az adattípuson alapuló hozzárendelést (például az egyszerű sztringmezők automatikusan kereshetők).A típusindexben
stringpontosan egy mezőnek kell lennie a kulcsmezőnek , amely egyedileg azonosítja az egyes dokumentumokat. Ebben a sémában a kulcs azHotelId.Ebben az indexben a leírásmezők a választható
analyzertulajdonságot használják, amely akkor van megadva, ha felül szeretné bírálni az alapértelmezett standard Lucene-elemzőt. Adescription_frmező a francia Lucene-elemzőt (FrLucene) használja, mert francia szöveget tárol. Azdescriptionopcionális Microsoft nyelvelemzőt (EnMicrosoft) használja.A Program.cs hozzon létre egy osztálypéldányt a
SearchServiceClientszolgáltatáshoz való csatlakozáshoz az alkalmazás konfigurációs fájljában (appsettings.json) tárolt értékek használatával.SearchServiceClientrendelkezik egyIndexestulajdonságával, amely tartalmazza az Azure Cognitive Search-indexek létrehozásához, listázásához, frissítéséhez vagy törléséhez szükséges összes metódust.using System; using System.Linq; using System.Threading; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Microsoft.Extensions.Configuration; namespace AzureSearchQuickstart { class Program { // Demonstrates index delete, create, load, and query // Commented-out code is uncommented in later steps static void Main(string[] args) { IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); IConfigurationRoot configuration = builder.Build(); SearchServiceClient serviceClient = CreateSearchServiceClient(configuration); string indexName = configuration["SearchIndexName"]; Console.WriteLine("{0}", "Deleting index...\n"); DeleteIndexIfExists(indexName, serviceClient); Console.WriteLine("{0}", "Creating index...\n"); CreateIndex(indexName, serviceClient); // Uncomment next 3 lines in "2 - Load documents" // ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName); // Console.WriteLine("{0}", "Uploading documents...\n"); // UploadDocuments(indexClient); // Uncomment next 2 lines in "3 - Search an index" // Console.WriteLine("{0}", "Searching index...\n"); // RunQueries(indexClient); Console.WriteLine("{0}", "Complete. Press any key to end application...\n"); Console.ReadKey(); } // Create the search service client private static SearchServiceClient CreateSearchServiceClient(IConfigurationRoot configuration) { string searchServiceName = configuration["SearchServiceName"]; string adminApiKey = configuration["SearchServiceAdminApiKey"]; SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(adminApiKey)); return serviceClient; } // Delete an existing index to reuse its name private static void DeleteIndexIfExists(string indexName, SearchServiceClient serviceClient) { if (serviceClient.Indexes.Exists(indexName)) { serviceClient.Indexes.Delete(indexName); } } // Create an index whose fields correspond to the properties of the Hotel class. // The Address property of Hotel will be modeled as a complex field. // The properties of the Address class in turn correspond to sub-fields of the Address complex field. // The fields of the index are defined by calling the FieldBuilder.BuildForType() method. private static void CreateIndex(string indexName, SearchServiceClient serviceClient) { var definition = new Microsoft.Azure.Search.Models.Index() { Name = indexName, Fields = FieldBuilder.BuildForType<Hotel>() }; serviceClient.Indexes.Create(definition); } } }Ha lehetséges, ossza meg az alkalmazás egyetlen példányát
SearchServiceClient, hogy elkerülje a túl sok kapcsolat megnyitását. Az osztálymetelyek szálbiztosak az ilyen megosztás engedélyezéséhez.Az osztálynak számos konstruktora van. A keresőszolgáltatás nevét és egy
SearchCredentialsobjektumot paraméterként kell megadnia.SearchCredentialsbecsomagolja az API-kulcsot.Az indexdefinícióban az objektumok létrehozásának legegyszerűbb módja a
Fieldmetódus meghívásaFieldBuilder.BuildForType, a típusparaméter modellosztályának átadása. A modellosztály olyan tulajdonságokkal rendelkezik, amelyek az index mezőihez vannak megfeleltetve. Ez a leképezés lehetővé teszi dokumentumok kötését a keresési indexből a modellosztály példányaihoz.Megjegyzés:
Ha nem tervez modellosztályt használni, akkor is definiálhatja az indexet közvetlenül objektumok létrehozásával
Field. Megadhatja a mező nevét a konstruktornak, valamint az adattípust (vagy a sztringmezők elemzője) is. Más tulajdonságokat is beállíthat, példáulIsSearchable,IsFilterablehogy néhányat említsünk.Nyomja le az F5 billentyűt az alkalmazás létrehozásához és az index létrehozásához.
Ha a projekt sikeresen buildel, megnyílik egy konzolablak, amely állapotüzeneteket ír a képernyőre az index törléséhez és létrehozásához.
2 – Dokumentumok betöltése
Az Azure Cognitive Searchben a dokumentumok olyan adatstruktúrák, amelyek egyaránt bemenetek az indexeléshez és a lekérdezésekből származó kimenetekhez. A külső adatforrásból származó dokumentumbemenetek lehetnek egy adatbázis sorai, blobok a Blob Storage-ban vagy a lemezen lévő JSON-dokumentumok. Ebben a példában egy parancsikont hozunk létre, és négy szállodához ágyazunk be JSON-dokumentumokat magában a kódban.
Dokumentumok feltöltésekor objektumot IndexBatch kell használnia. Egy IndexBatch objektumgyűjteményt IndexAction tartalmaz, amelyek mindegyike tartalmaz egy dokumentumot és egy tulajdonságot, amelyből megtudhatja, hogy az Azure Cognitive Search milyen műveletet hajt végre (feltöltés, egyesítés, törlés és mergeOrUpload).
A Program.cs hozzon létre egy dokumentum- és indexműveleteket tartalmazó tömböt, majd adja át a tömböt a következőnek
IndexBatch: . Az alábbi dokumentumok megfelelnek a szállodai-gyorsindításhoz tartozó indexnek, amelyet a szállodai és címkategóriák határoznak meg.// Upload documents as a batch private static void UploadDocuments(ISearchIndexClient indexClient) { var actions = new IndexAction<Hotel>[] { IndexAction.Upload( new Hotel() { HotelId = "1", HotelName = "Secret Point Motel", 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.", DescriptionFr = "L'hôtel est idéalement situé sur la principale artère commerciale de la ville en plein cœur de New York. A quelques minutes se trouve la place du temps et le centre historique de la ville, ainsi que d'autres lieux d'intérêt qui font de New York l'une des villes les plus attractives et cosmopolites de l'Amérique.", Category = "Boutique", Tags = new[] { "pool", "air conditioning", "concierge" }, ParkingIncluded = false, LastRenovationDate = new DateTimeOffset(1970, 1, 18, 0, 0, 0, TimeSpan.Zero), Rating = 3.6, Address = new Address() { StreetAddress = "677 5th Ave", City = "New York", StateProvince = "NY", PostalCode = "10022", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "2", HotelName = "Twin Dome Motel", 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.", DescriptionFr = "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.", Category = "Boutique", Tags = new[] { "pool", "free wifi", "concierge" }, ParkingIncluded = false, LastRenovationDate = new DateTimeOffset(1979, 2, 18, 0, 0, 0, TimeSpan.Zero), Rating = 3.60, Address = new Address() { StreetAddress = "140 University Town Center Dr", City = "Sarasota", StateProvince = "FL", PostalCode = "34243", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "3", HotelName = "Triple 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.", DescriptionFr = "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.", Category = "Resort and Spa", Tags = new[] { "air conditioning", "bar", "continental breakfast" }, ParkingIncluded = true, LastRenovationDate = new DateTimeOffset(2015, 9, 20, 0, 0, 0, TimeSpan.Zero), Rating = 4.80, Address = new Address() { StreetAddress = "3393 Peachtree Rd", City = "Atlanta", StateProvince = "GA", PostalCode = "30326", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "4", HotelName = "Sublime Cliff Hotel", Description = "Sublime Cliff 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 Cliff is part of a lovingly restored 1800 palace.", DescriptionFr = "Le sublime Cliff Hotel est situé au coeur du centre historique de sublime dans un quartier extrêmement animé et vivant, à courte distance de marche des sites et monuments de la ville et est entouré par l'extraordinaire beauté des églises, des bâtiments, des commerces et Monuments. Sublime Cliff fait partie d'un Palace 1800 restauré avec amour.", Category = "Boutique", Tags = new[] { "concierge", "view", "24-hour front desk service" }, ParkingIncluded = true, LastRenovationDate = new DateTimeOffset(1960, 2, 06, 0, 0, 0, TimeSpan.Zero), Rating = 4.6, Address = new Address() { StreetAddress = "7400 San Pedro Ave", City = "San Antonio", StateProvince = "TX", PostalCode = "78216", Country = "USA" } } ), }; var batch = IndexBatch.New(actions); try { indexClient.Documents.Index(batch); } catch (IndexBatchException e) { // When a service is under load, indexing might fail for some documents in the batch. // Depending on your application, you can compensate by delaying and retrying. // For this simple demo, we just log the failed document keys and continue. Console.WriteLine( "Failed to index some of the documents: {0}", String.Join(", ", e.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key))); } // Wait 2 seconds before starting queries Console.WriteLine("Waiting for indexing...\n"); Thread.Sleep(2000); }Miután inicializálta az objektumot
IndexBatch, elküldheti azt az indexbe azáltal, hogy meghívjaDocuments.IndexaSearchIndexClientobjektumot.Documentsaz indexben lévő dokumentumok hozzáadására, módosítására, törlésére vagy lekérdezésére szolgáló módszereket biztosító tulajdonságSearchIndexClient.A
Indexmetódus hívását körülvevőtry/catchelkapja az indexelési hibákat, amelyek akkor fordulhatnak elő, ha a szolgáltatás nagy terhelés alatt áll. Az éles kódban késleltetheti, majd újrapróbálhatja a sikertelen dokumentumok indexelését, vagy naplózhatja az eseményt és úgy folytathatja, ahogyan a példa is teszi, vagy más módon kezelheti azt, amely megfelel az alkalmazás adatkonzisztenciára vonatkozó követelményeinek.A 2 másodperces késleltetés kompenzálja az indexelést, amely aszinkron, így az összes dokumentum indexelhető a lekérdezések végrehajtása előtt. A késésben történő kódolás általában csak demókban, tesztekben és mintaalkalmazásokban szükséges.
A Program.cs fájlban a main részben tegyen megjegyzésmentessé a "2 - Dokumentumok betöltése" sorokat.
// Uncomment next 3 lines in "2 - Load documents" ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName); Console.WriteLine("{0}", "Uploading documents...\n"); UploadDocuments(indexClient);Nyomja le az F5 billentyűt az alkalmazás újraépítéséhez.
Ha a projekt sikeresen épül fel, megnyílik egy konzolablak, amely állapotüzeneteket ír, ezúttal a dokumentumok feltöltéséről szóló üzenettel. Az Azure Portal keresési szolgáltatás áttekintési lapján a hotels-quickstart indexnek most 4 dokumentumot kell használnia.
További információ a dokumentumfeldolgozásról: "Hogyan kezeli a .NET SDK a dokumentumokat".
3 – Keresés egy indexben
Az első dokumentum indexelése után azonnal lekérheti a lekérdezési eredményeket, de az index tényleges tesztelésének várnia kell, amíg az összes dokumentum indexel.
Ez a szakasz két funkciót ad hozzá: lekérdezési logikát és eredményeket. Lekérdezésekhez használja a metódust Search . Ez a metódus a keresési szöveget és más paramétereket is felveszi.
Az DocumentsSearchResult osztály az eredményeket jelöli.
A Program.cs hozzon létre egy WriteDocuments metódust, amely a keresési eredményeket a konzolra nyomtatja.
private static void WriteDocuments(DocumentSearchResult<Hotel> searchResults) { foreach (SearchResult<Hotel> result in searchResults.Results) { Console.WriteLine(result.Document); } Console.WriteLine(); }Hozzon létre egy RunQueries metódust a lekérdezések végrehajtásához és az eredmények visszaadásához. Az eredmények hotelobjektumok. A kiválasztási paraméter használatával egyes mezőket jeleníthet meg. Ha egy mező nem szerepel a kiválasztási paraméterben, a megfelelő Hotel tulajdonság null értékű lesz.
private static void RunQueries(ISearchIndexClient indexClient) { SearchParameters parameters; DocumentSearchResult<Hotel> results; // Query 1 Console.WriteLine("Query 1: Search for term 'Atlanta' with no result trimming"); parameters = new SearchParameters(); results = indexClient.Documents.Search<Hotel>("Atlanta", parameters); WriteDocuments(results); // Query 2 Console.WriteLine("Query 2: Search on the term 'Atlanta', with trimming"); Console.WriteLine("Returning only these fields: HotelName, Tags, Address:\n"); parameters = new SearchParameters() { Select = new[] { "HotelName", "Tags", "Address" }, }; results = indexClient.Documents.Search<Hotel>("Atlanta", parameters); WriteDocuments(results); // Query 3 Console.WriteLine("Query 3: Search for the terms 'restaurant' and 'wifi'"); Console.WriteLine("Return only these fields: HotelName, Description, and Tags:\n"); parameters = new SearchParameters() { Select = new[] { "HotelName", "Description", "Tags" } }; results = indexClient.Documents.Search<Hotel>("restaurant, wifi", parameters); WriteDocuments(results); // Query 4 -filtered query Console.WriteLine("Query 4: Filter on ratings greater than 4"); Console.WriteLine("Returning only these fields: HotelName, Rating:\n"); parameters = new SearchParameters() { Filter = "Rating gt 4", Select = new[] { "HotelName", "Rating" } }; results = indexClient.Documents.Search<Hotel>("*", parameters); WriteDocuments(results); // Query 5 - top 2 results Console.WriteLine("Query 5: Search on term 'boutique'"); Console.WriteLine("Sort by rating in descending order, taking the top two results"); Console.WriteLine("Returning only these fields: HotelId, HotelName, Category, Rating:\n"); parameters = new SearchParameters() { OrderBy = new[] { "Rating desc" }, Select = new[] { "HotelId", "HotelName", "Category", "Rating" }, Top = 2 }; results = indexClient.Documents.Search<Hotel>("boutique", parameters); WriteDocuments(results); }A lekérdezésekben kétféleképpen lehet egyező kifejezéseket létrehozni: a teljes szöveges keresést és a szűrőket. Egy teljes szöveges keresési lekérdezés egy vagy több kifejezést keres az index mezőiben
IsSearchable. A szűrő egy logikai kifejezés, amely egy index mezői alapján kerül kiértékelésreIsFilterable. A teljes szöveges keresés és a szűrők együtt vagy külön is használhatók.A keresést és a szűrőket is a metódussal hajtja végre a
Documents.Searchrendszer. A paraméterbensearchTextmegadható keresési lekérdezés, míg egy szűrőkifejezés átadható azFilterSearchParametersosztály tulajdonságában. Keresés nélküli szűréshez egyszerűen adja meg asearchTextparaméternek a"*"értéket. Ha szűrés nélkül szeretne keresni, egyszerűen hagyja aFiltertulajdonságot beállítatlanul, vagy egyáltalán ne adjon átSearchParameterspéldányt.A Program.cs fájl main függvényében kommenteljük ki a "3 – Keresés" sorokat.
// Uncomment next 2 lines in "3 - Search an index" Console.WriteLine("{0}", "Searching documents...\n"); RunQueries(indexClient);A megoldás befejeződött. Nyomja le az F5 billentyűt az alkalmazás újraépítéséhez és a program teljes futtatásához.
A kimenet ugyanazokat az üzeneteket tartalmazza, mint korábban, a lekérdezési információk és eredmények hozzáadásával.
Erőforrások tisztítása
Amikor a saját előfizetésedben dolgozol, érdemes a projekt végén átgondolni, hogy szükséged van-e még a létrehozott erőforrásokra. A továbbra is futó erőforrások pénzbe kerülhetnek. 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ások a portálon találhatók és kezelhetők a bal oldali navigációs panelen található Minden erőforrás vagy Erőforráscsoportok hivatkozással.
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 C#-rövid útmutatóban számos feladatot dolgozott át egy index létrehozásához, a dokumentumok betöltéséhez és a lekérdezések futtatásához. Különböző szakaszokban billentyűparancsokkal egyszerűsítettük a kódot az olvashatóság és a megértés érdekében. Ha jól ismeri az alapfogalmakat, javasoljuk a következő cikket az alternatív megközelítések és fogalmak feltárásához, amelyek elmélyítik tudását.
A mintakód és az index ennek bővített verziói. A következő minta hozzáad egy Szobagyűjteményt, különböző osztályokat és műveleteket használ, és közelebbről áttekinti a feldolgozás működését.
Szeretné optimalizálni és csökkenteni a felhőre fordított kiadásait?