Dela via


Snabbstart: Skapa ett sökindex med det äldre Microsoft.Azure.Search v10-klientbiblioteket

Den här artikeln är C#-snabbstarten för det äldre Microsoft.Azure.Search-klientbiblioteket (version 10), som nu ersätts av klientbiblioteket Azure.Search.Documents (version 11).

Anteckning

Om du har befintliga eller inflight-utvecklingsprojekt kan du fortsätta att använda version 10. Men för nya projekt, eller för att använda nya funktioner, bör du gå över till det nya biblioteket.

Om den här snabbstarten

Skapa ett .NET Core-konsolprogram i C# som skapar, läser in och frågar ett Azure Cognitive Search index med hjälp av Visual Studio och Microsoft.Azure.Search-klientbiblioteken.

Den här artikeln beskriver hur du skapar programmet. Du kan också ladda ned och köra hela programmet.

Anteckning

Demokoden i den här artikeln använder synkrona metoder i Azure Cognitive Search version 10 .NET SDK för enkelhetens skull. För produktionsscenarier rekommenderar vi dock att du använder asynkrona metoder i dina egna program för att hålla dem skalbara och dynamiska. Du kan till exempel använda CreateAsync och DeleteAsync i stället för Create och Delete.

Förutsättningar

Innan du börjar måste du ha följande:

Hämta en nyckel och en URL

Anrop till tjänsten kräver en URL-slutpunkt och en åtkomstnyckel för varje begäran. En söktjänst skapas med båda, så om du har lagt till Azure Cognitive Search i din prenumeration följer du dessa steg för att hämta nödvändig information:

  1. Logga in på Azure Portal och hämta URL:en i söktjänstens översiktssida. Här följer ett exempel på hur en slutpunkt kan se ut: https://mydemo.search.windows.net.

  2. I Inställningar> Keys hämtar du en administratörsnyckel för fullständiga rättigheter för tjänsten. Det finns två utbytbara administratörsnycklar som tillhandahålls för affärskontinuitet om du behöver rulla över en. Du kan använda antingen den primära eller sekundära nyckeln för begäranden om att lägga till, ändra och ta bort objekt.

    Hämta även frågenyckeln. Det är bästa praxis att utfärda frågebegäranden med skrivskyddad åtkomst.

Get an HTTP endpoint and access key

Alla begäranden kräver en API-nyckel för varje begäran som skickas till din tjänst. En giltig nyckel upprättar förtroende, i varje begäran, mellan programmet som skickar begäran och tjänsten som hanterar den.

Konfigurera din miljö

Börja med att öppna Visual Studio och skapa ett nytt konsolappprojekt som kan köras på .NET Core.

Installera NuGet-paket

Microsoft.Azure.Search-paketet består av några klientbibliotek som distribueras som NuGet-paket.

I det här projektet använder du version 10 av Microsoft.Azure.Search NuGet-paketet och det senaste Microsoft.Extensions.Configuration.Json NuGet-paketet.

  1. I Verktyg>NuGet Package Manager väljer du Hantera NuGet-paket för lösning....

  2. Klicka på Browse (Bläddra).

  3. Sök Microsoft.Azure.Search efter och välj version 10.

  4. Klicka på Installera till höger för att lägga till sammansättningen i projektet och lösningen.

  5. Upprepa för Microsoft.Extensions.Configuration.Jsonoch välj version 2.2.0 eller senare.

Lägg till Azure Cognitive Search tjänstinformation

  1. I Solution Explorer högerklickar du på projektet och väljer Lägg till>nytt objekt... .

  2. I Lägg till nytt objekt söker du efter "JSON" för att returnera en JSON-relaterad lista med objekttyper.

  3. Välj JSON-fil, ge filen namnet "appsettings.json" och klicka på Lägg till.

  4. Lägg till filen i utdatakatalogen. Högerklicka på appsettings.json och välj Egenskaper. I Kopiera till utdatakatalog väljer du Kopiera om nyare.

  5. Kopiera följande JSON till din nya JSON-fil.

    {
      "SearchServiceName": "<YOUR-SEARCH-SERVICE-NAME>",
      "SearchServiceAdminApiKey": "<YOUR-ADMIN-API-KEY>",
      "SearchIndexName": "hotels-quickstart"
    }
    
  6. Ersätt söktjänstens namn (YOUR-SEARCH-SERVICE-NAME) och admin-API-nyckeln (YOUR-ADMIN-API-KEY) med giltiga värden. Om tjänstslutpunkten är https://mydemo.search.windows.netblir tjänstnamnet "mydemo".

Lägg till klass ". Metodfiler till projektet

Det här steget krävs för att skapa meningsfulla utdata i konsolen. När du skriver ut resultat till konsolfönstret måste enskilda fält från Objektet Hotell returneras som strängar. Det här steget implementerar ToString() för att utföra den här uppgiften, vilket du gör genom att kopiera den nödvändiga koden till två nya filer.

  1. Lägg till två tomma klassdefinitioner i projektet: Address.Methods.cs, Hotel.Methods.cs

  2. I Address.Methods.cs skriver du över standardinnehållet med följande kod, raderna 1–25.

  3. I Hotel.Methods.cs kopierar du raderna 1-68.

1 – Skapa index

Hotellindexet består av enkla och komplexa fält, där ett enkelt fält är "HotelName" eller "Description", och komplexa fält är en adress med underfält eller en samling rum. När ett index innehåller komplexa typer isolerar du de komplexa fältdefinitionerna i separata klasser.

  1. Lägg till två tomma klassdefinitioner i projektet: Address.cs, Hotel.cs

  2. Skriv över standardinnehållet med följande kod i Address.cs:

    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; }
        }
    }
    
  3. I Hotel.cs definierar klassen indexets övergripande struktur, inklusive referenser till adressklassen.

    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; }
        }
    }
    

    Attribut i fältet avgör hur det används i ett program. Attributet måste till exempel IsSearchable tilldelas till varje fält som ska inkluderas i en fulltextsökning.

    Anteckning

    I .NET SDK måste fält uttryckligen tillskrivas som IsSearchable, IsFilterable, IsSortableoch IsFacetable. Det här beteendet står i kontrast till REST-API:et som implicit möjliggör attribution baserat på datatyp (till exempel är enkla strängfält automatiskt sökbara).

    Exakt ett fält i indexet av typen string måste vara nyckelfältet och unikt identifiera varje dokument. I det här schemat är HotelIdnyckeln .

    I det här indexet använder beskrivningsfälten den valfria analyzer egenskapen, som anges när du vill åsidosätta lucene-standardanalyseraren. Fältet description_fr använder den franska Lucene-analysatorn (FrLucene) eftersom den lagrar fransk text. description Använder den valfria Microsoft-språkanalysatorn (EnMicrosoft).

  4. I Program.cs skapar du en instans av SearchServiceClient klassen för att ansluta till tjänsten med värden som lagras i programmets konfigurationsfil (appsettings.json).

    SearchServiceClienthar en Indexes egenskap som tillhandahåller alla metoder som du behöver för att skapa, lista, uppdatera eller ta bort Azure Cognitive Search index.

    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);
            }
        }
    }    
    

    Om möjligt kan du dela en enda instans av SearchServiceClient i ditt program för att undvika att öppna för många anslutningar. Klassmetoder är trådsäkra för att möjliggöra sådan delning.

    Klassen har flera konstruktorer. Den som du vill använda har namnet på din söktjänst och ett SearchCredentials-objekt som parametrar. SearchCredentials omsluter din API-nyckel.

    I indexdefinitionen är det enklaste sättet att skapa objekten FieldFieldBuilder.BuildForType genom att anropa metoden och skicka en modellklass för typparametern. En modellklass har egenskaper som mappar till fält i ditt index. Med den här mappningen kan du binda dokument från ditt sökindex till instanser av modellklassen.

    Anteckning

    Även om du inte planerar att använda någon modellklass kan du definiera ditt index genom att skapa Field-objekt direkt. Du kan ge namnet på fältet till konstruktorn, tillsammans med datatypen (eller analysverktyget för strängfält). Du kan också ange andra egenskaper som IsSearchable, IsFilterable, för att nämna några.

  5. Tryck på F5 för att skapa appen och skapa indexet.

    Om projektet har skapats öppnas ett konsolfönster, där statusmeddelanden skrivs till skärmen för att ta bort och skapa indexet.

2 – Läsa in dokument

I Azure Cognitive Search är dokument datastrukturer som både är indata för indexering och utdata från frågor. Som hämtats från en extern datakälla kan dokumentindata vara rader i en databas, blobbar i Blob Storage eller JSON-dokument på disken. I det här exemplet tar vi en genväg och bäddar in JSON-dokument för fyra hotell i själva koden.

När du laddar upp dokument måste du använda ett IndexBatch objekt. En IndexBatch innehåller en samling IndexAction objekt som var och en innehåller ett dokument och en egenskap som talar om för Azure Cognitive Search vilken åtgärd som ska utföras (ladda upp, slå samman, ta bort och mergeOrUpload).

  1. I Program.cs skapar du en matris med dokument och indexåtgärder och skickar sedan matrisen till IndexBatch. Dokumenten nedan överensstämmer med indexet hotel-quickstart enligt definitionen i hotell- och adressklasserna.

    // 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);
    }
    

    När du har initierat objektetIndexBatch kan du skicka det till indexet genom att anropa Documents.Index på objektet SearchIndexClient . Documents är en egenskap SearchIndexClient för som tillhandahåller metoder för att lägga till, ändra, ta bort eller köra frågor mot dokument i ditt index.

    Det try/catch omgivande anropet Index till metoden fångar upp indexeringsfel, vilket kan inträffa om tjänsten är hårt belastad. I produktionskoden kan du fördröja och sedan försöka indexera de dokument som misslyckades igen, eller logga och fortsätta som exemplet gör, eller hantera det på något annat sätt som uppfyller programmets datakonsekvenskrav.

    Fördröjningen på 2 sekunder kompenserar för indexering, vilket är asynkront, så att alla dokument kan indexeras innan frågorna körs. Kodning i en fördröjning är vanligtvis bara nödvändigt i demonstrationer, tester och exempelprogram.

  2. I Program.cs avkommentar du raderna för "2 – Läs in dokument".

    // Uncomment next 3 lines in "2 - Load documents"
    ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName);
    Console.WriteLine("{0}", "Uploading documents...\n");
    UploadDocuments(indexClient);
    
  3. Tryck på F5 för att återskapa appen.

    Om projektet har skapats öppnas ett konsolfönster som skriver statusmeddelanden, den här gången med ett meddelande om att ladda upp dokument. I Azure Portal på söktjänstens översiktssida bör indexet hotels-quickstart nu ha 4 dokument.

Mer information om dokumentbearbetning finns i "Så hanterar .NET SDK dokument".

3 – Söka i ett index

Du kan få frågeresultat så snart det första dokumentet indexeras, men den faktiska testningen av indexet bör vänta tills alla dokument har indexerats.

Det här avsnittet lägger till två funktioner: frågelogik och resultat. Använd metoden för Search frågor. Den här metoden tar både söktext och andra parametrar.

Klassen DocumentsSearchResult representerar resultatet.

  1. I Program.cs skapar du en WriteDocuments-metod som skriver ut sökresultat till konsolen.

    private static void WriteDocuments(DocumentSearchResult<Hotel> searchResults)
    {
        foreach (SearchResult<Hotel> result in searchResults.Results)
        {
            Console.WriteLine(result.Document);
        }
    
        Console.WriteLine();
    }
    
  2. Skapa en RunQueries-metod för att köra frågor och returnera resultat. Resultatet är Hotellobjekt. Du kan använda select-parametern för att visa enskilda fält. Om ett fält inte ingår i select-parametern är dess motsvarande Hotell-egenskap null.

    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);
    }
    

    Det finns två sätt att matcha termer i en fråga: fulltextsökning och filter. En fulltextsökningsfråga söker efter en eller flera termer i IsSearchable fält i ditt index. Ett filter är ett booleskt uttryck som utvärderas över IsFilterable fält i ett index. Du kan använda fulltextsökning och filter tillsammans eller separat.

    Både sökningar och filtreringar utförs med hjälp av metoden Documents.Search. En sökfråga kan skickas i parametern searchText, medan ett filteruttryck kan skickas i Filter-egenskapen för klassen SearchParameters. Om du vill filtrera utan sökning skickar du bara "*" för searchText-parametern. Om du vill söka utan filtrering lämnar du bara Filter-egenskapen odefinierad eller väljer att inte skicka den i en SearchParameters-instans över huvud taget.

  3. I Program.cs avkommentar du raderna för "3 – Sök".

    // Uncomment next 2 lines in "3 - Search an index"
    Console.WriteLine("{0}", "Searching documents...\n");
    RunQueries(indexClient);
    
  4. Lösningen är nu klar. Tryck på F5 för att återskapa appen och köra programmet i sin helhet.

    Utdata innehåller samma meddelanden som tidigare, med tillägg av frågeinformation och resultat.

Rensa resurser

När du arbetar i din egen prenumeration kan det dock vara klokt att i slutet av ett projekt kontrollera om du fortfarande behöver de resurser som du skapade. Resurser som fortsätter att köras kostar pengar. Du kan ta bort resurser individuellt eller ta bort resursgruppen om du vill ta bort hela uppsättningen resurser.

Du kan hitta och hantera resurser i portalen med hjälp av länken Alla resurser eller Resursgrupper i det vänstra navigeringsfönstret.

Om du använder en kostnadsfri tjänst bör du komma ihåg att du är begränsad till tre index, indexerare och datakällor. Du kan ta bort enskilda objekt i portalen för att hålla dig under gränsen.

Nästa steg

I den här C#-snabbstarten har du gått igenom en serie uppgifter för att skapa ett index, läsa in det med dokument och köra frågor. I olika skeden tog vi genvägar för att förenkla koden för läsbarhet och förståelse. Om du känner dig bekväm med de grundläggande begreppen rekommenderar vi nästa artikel för en utforskning av alternativa metoder och begrepp som fördjupar dina kunskaper.

Exempelkoden och indexet är utökade versioner av den här. Nästa exempel lägger till en Rooms-samling, använder olika klasser och åtgärder och tar en närmare titt på hur bearbetningen fungerar.

Vill du optimera och spara på dina molnutgifter?