Hızlı Başlangıç: Azure SDK'larını kullanarak tam metin araması

Tam metin araması için örnek verileri kullanarak bir arama dizini oluşturmak, yüklemek ve sorgulamak için Azure SDK'da Azure.Search.Documents istemci kitaplığını kullanmayı öğrenin. Tam metin aramada dizin oluşturma ve sorgular için Apache Lucene, sonuçları puanlama için ise BM25 derecelendirme algoritması kullanılır.

Bu hızlı başlangıçta aşağıdaki SDK'lar için adımlar verilmiştir:

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.

  • Azure AI Arama hizmeti. Hizmetiniz yoksa bir hizmet oluşturun. Bu hızlı başlangıç için ücretsiz bir katman kullanabilirsiniz.

  • API anahtarı ve hizmet uç noktası. Azure portalında oturum açın ve arama hizmetinizi bulun.

    Genel Bakış'ta URL'yi kopyalayın ve sonraki bir adım için Not Defteri kaydedin. Örnek uç nokta https://mydemo.search.windows.net şeklinde görünebilir.

    Anahtarlar'da, nesneleri oluşturmak ve silmek için tam haklar için bir yönetici anahtarını kopyalayın ve kaydedin. İki değiştirilebilir birincil ve ikincil anahtar vardır. Birini seçin.

    Get an HTTP endpoint and access key

Dizin oluşturma, yükleme ve sorgulama

Sonraki adım için bir programlama dili seçin. Azure.Search.Documents istemci kitaplıkları .NET, Python, Java ve JavaScript için Azure SDK'larında kullanılabilir.

Arama dizini oluşturmak, yüklemek ve sorgulamak için Azure.Search.Documents istemci kitaplığını kullanarak bir konsol uygulaması oluşturun. Alternatif olarak, tamamlanmış bir projeyle başlamak için kaynak kodu indirebilir veya kendi projenizi oluşturmak için bu adımları izleyebilirsiniz.

Ortamınızı ayarlama

  1. Visual Studio'yu başlatın ve konsol uygulaması için yeni bir proje oluşturun.

  2. Araçlar>NuGet Paket Yöneticisi Çözüm için NuGet Paketlerini Yönet... seçeneğini belirleyin.

  3. Göz At'ı seçin.

  4. Azure.Search.Documents paketini arayın ve sürüm 11.0 veya üzerini seçin.

  5. Derlemeyi projenize ve çözümünüze eklemek için sağ tarafta Yükle'yi seçin.

Arama istemcisi oluşturma

  1. Program.cs ad alanını olarak AzureSearch.SDK.Quickstart.v11 değiştirin ve ardından aşağıdaki using yönergeleri ekleyin.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. İki istemci oluşturma: SearchIndexClient dizini oluşturur ve SearchClient var olan bir dizini yükler ve sorgular. Hem hizmet uç noktası hem de oluşturma/silme haklarıyla kimlik doğrulaması için bir yönetici API anahtarı gerekir.

    Kod sizin için URI'yi derlediğinden, "serviceName" özelliğinde yalnızca arama hizmeti adını belirtin.

     static void Main(string[] args)
     {
         string serviceName = "<your-search-service-name>";
         string apiKey = "<your-search-service-admin-api-key>";
         string indexName = "hotels-quickstart";
    
         // Create a SearchIndexClient to send create/delete index commands
         Uri serviceEndpoint = new Uri($"https://{serviceName}.search.windows.net/");
         AzureKeyCredential credential = new AzureKeyCredential(apiKey);
         SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, credential);
    
         // Create a SearchClient to load and query documents
         SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, credential);
         . . . 
     }
    

Dizin oluşturma

Bu hızlı başlangıçta, otel verileriyle yükleyip sorgular yürütdüğünüz bir Hotels dizini oluşturacaksınız. Bu adımda, dizindeki alanları tanımlayın. Her alan tanımı, alanın nasıl kullanıldığını belirleyen bir ad, veri türü ve öznitelikler içerir.

Bu örnekte, kolaylık ve okunabilirlik için Azure.Search.Documents kitaplığının zaman uyumlu yöntemleri kullanılır. Ancak üretim senaryolarında uygulamanızı ölçeklenebilir ve duyarlı tutmak için zaman uyumsuz yöntemler kullanmanız gerekir. Örneğin, CreateIndex yerine CreateIndexAsync kullanabilirsiniz.

  1. Projenize boş bir sınıf tanımı ekleyin: Hotel.cs

  2. Otel belgesinin yapısını tanımlamak için aşağıdaki kodu Hotel.cs kopyalayın. Alandaki öznitelikler, uygulamada nasıl kullanıldığını belirler. Örneğin, IsFilterable özniteliği bir filtre ifadesini destekleyen her alana atanmalıdır.

    using System;
    using System.Text.Json.Serialization;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    
    namespace AzureSearch.Quickstart
    {
        public partial class Hotel
        {
            [SimpleField(IsKey = true, IsFilterable = true)]
            public string HotelId { get; set; }
    
            [SearchableField(IsSortable = true)]
            public string HotelName { get; set; }
    
            [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnLucene)]
            public string Description { get; set; }
    
            [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)]
            [JsonPropertyName("Description_fr")]
            public string DescriptionFr { get; set; }
    
            [SearchableField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
            public string Category { get; set; }
    
            [SearchableField(IsFilterable = true, IsFacetable = true)]
            public string[] Tags { get; set; }
    
            [SimpleField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
            public bool? ParkingIncluded { get; set; }
    
            [SimpleField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
            public DateTimeOffset? LastRenovationDate { get; set; }
    
            [SimpleField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
            public double? Rating { get; set; }
    
            [SearchableField]
            public Address Address { get; set; }
        }
    }
    

    Azure.Search.Documents istemci kitaplığında, alan tanımlarını kolaylaştırmak için SearchableField ve SimpleField kullanabilirsiniz. Her ikisi de SearchField'in türevleridir ve kodunuzu basitleştirebilir:

    • SimpleField herhangi bir veri türü olabilir, her zaman aranamaz (tam metin arama sorguları için yoksayılır) ve alınabilir (gizli değildir). Diğer öznitelikler varsayılan olarak kapalıdır, ancak etkinleştirilebilir. Belge kimlikleri veya yalnızca filtrelerde, modellerde veya puanlama profillerinde kullanılan alanlar için kullanabilirsiniz SimpleField . Bu durumda, belge kimliği gibi IsKey = true senaryo için gerekli olan öznitelikleri uyguladığınıza emin olun. Daha fazla bilgi için bkz . kaynak kodunda SimpleFieldAttribute.cs .

    • SearchableField bir dize olmalıdır ve her zaman aranabilir ve alınabilir. Diğer öznitelikler varsayılan olarak kapalıdır, ancak etkinleştirilebilir. Bu alan türü aranabilir olduğundan, eş anlamlıları ve çözümleyici özelliklerinin tam tamamlayıcısını destekler. Daha fazla bilgi için kaynak kodundaki SearchableFieldAttribute.cs bakın.

    İster temel SearchField API'yi ister yardımcı modellerden birini kullanın, filtre, model ve sıralama özniteliklerini açıkça etkinleştirmeniz gerekir. Örneğin, yukarıdaki örnekte gösterildiği gibi IsFilterable, IsSortable ve IsFacetable açıkça ilişkilendirilmelidir.

  3. Projenize ikinci bir boş sınıf tanımı ekleyin: Address.cs. Aşağıdaki kodu sınıfına kopyalayın.

    using Azure.Search.Documents.Indexes;
    
     namespace AzureSearch.Quickstart
     {
         public partial class Address
         {
             [SearchableField(IsFilterable = true)]
             public string StreetAddress { get; set; }
    
             [SearchableField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
             public string City { get; set; }
    
             [SearchableField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
             public string StateProvince { get; set; }
    
             [SearchableField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
             public string PostalCode { get; set; }
    
             [SearchableField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
             public string Country { get; set; }
         }
     }
    
  4. İki sınıf daha oluşturun: ToString() geçersiz kılmaları için Hotel.Methods.cs ve Address.Methods.cs. Bu sınıflar, konsol çıkışında arama sonuçlarını işlemek için kullanılır. Bu sınıfların içeriği bu makalede sağlanmamıştır, ancak GitHub'daki dosyalardan kodu kopyalayabilirsiniz.

  5. Program.cs bir SearchIndex nesnesi oluşturun ve ardından arama hizmetinizdeki dizini ifade etmek için CreateIndex yöntemini çağırın. Dizin ayrıca, belirtilen alanlarda otomatik tamamlamayı etkinleştirmek için bir SearchSuggester içerir.

     // Create hotels-quickstart index
     private static void CreateIndex(string indexName, SearchIndexClient adminClient)
     {
         FieldBuilder fieldBuilder = new FieldBuilder();
         var searchFields = fieldBuilder.Build(typeof(Hotel));
    
         var definition = new SearchIndex(indexName, searchFields);
    
         var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
         definition.Suggesters.Add(suggester);
    
         adminClient.CreateOrUpdateIndex(definition);
     }
    

Belge yükleme

Azure AI Search, hizmette depolanan içerik üzerinde aramalar. Bu adımda, yeni oluşturduğunuz otel dizinine uygun JSON belgelerini yükleyeceksiniz.

Azure AI Search'te arama belgeleri hem dizin oluşturmaya giriş hem de sorgulardan alınan çıkışlar olan veri yapılarıdır. Dış veri kaynağından elde edilen belge girişleri veritabanındaki satırlar, Blob depolamadaki bloblar veya diskteki JSON belgeleri olabilir. Bu örnekte bir kısayol kullanıyoruz ve kodun kendisine dört otel için JSON belgeleri ekliyoruz.

Belgeleri karşıya yüklerken IndexDocumentsBatch nesnesi kullanmanız gerekir. NesneIndexDocumentsBatch, her biri bir belge ve Azure AI Search'e gerçekleştirilecek eylemi (karşıya yükleme, birleştirme, silme ve birleştirmeOrUpload) söyleyen bir özellik içeren bir Eylemler koleksiyonu içerir.

  1. Program.cs bir dizi belge ve dizin eylemi oluşturun ve diziyi öğesine IndexDocumentsBatchgeçirin. Aşağıdaki belgeler, otel sınıfı tarafından tanımlanan hotels-quickstart dizinine uygundur.

    // Upload documents in a single Upload request.
    private static void UploadDocuments(SearchClient searchClient)
    {
        IndexDocumentsBatch<Hotel> batch = IndexDocumentsBatch.Create(
            IndexDocumentsAction.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"
                    }
                }),
            IndexDocumentsAction.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"
                    }
                }),
            IndexDocumentsAction.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"
                    }
                }),
            IndexDocumentsAction.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.60,
                    Address = new Address()
                    {
                        StreetAddress = "7400 San Pedro Ave",
                        City = "San Antonio",
                        StateProvince = "TX",
                        PostalCode = "78216",
                        Country = "USA"
                    }
                })
            );
    
        try
        {
            IndexDocumentsResult result = searchClient.IndexDocuments(batch);
        }
        catch (Exception)
        {
            // If for some reason any documents are dropped during indexing, you can compensate by delaying and
            // retrying. This simple demo just logs the failed document keys and continues.
            Console.WriteLine("Failed to index some of the documents: {0}");
        }
    }
    

    IndexDocumentsBatch nesnesini başlatıldıktan sonra, SearchClient nesnenizde IndexDocuments'ı çağırarak dizine gönderebilirsiniz.

  2. Main() öğesine aşağıdaki satırları ekleyin. Belgeleri yükleme işlemi SearchClient kullanılarak yapılır, ancak işlem genellikle SearchIndexClient ile ilişkilendirilmiş olan hizmet üzerinde yönetici hakları da gerektirir. Bu işlemi ayarlamanın bir yolu SearchIndexClient (bu örnekte adminClient) aracılığıyla SearchClient'ı almaktır.

     SearchClient ingesterClient = adminClient.GetSearchClient(indexName);
    
     // Load documents
     Console.WriteLine("{0}", "Uploading documents...\n");
     UploadDocuments(ingesterClient);
    
  3. Bu, tüm komutları sıralı olarak çalıştıran bir konsol uygulaması olduğundan, dizin oluşturma ve sorgular arasında 2 saniyelik bekleme süresi ekleyin.

    // Wait 2 seconds for indexing to complete before starting queries (for demo and console-app purposes only)
    Console.WriteLine("Waiting for indexing...\n");
    System.Threading.Thread.Sleep(2000);
    

    2 saniyelik gecikme, sorgular yürütülmeden önce tüm belgelerin dizine alınabilmesi için zaman uyumsuz olan dizin oluşturmayı telafi eder. Gecikmeli kodlama genellikle yalnızca tanıtımlarda, testlerde ve örnek uygulamalarda gereklidir.

Dizin arama

İlk belge dizine alınır başlatılmaz sorgu sonuçlarını alabilirsiniz, ancak dizininizin gerçek testi tüm belgeler dizine alınana kadar beklemelidir.

Bu bölüm iki işlev parçası ekler: sorgu mantığı ve sonuçlar. Sorgular için Search yöntemini kullanın. Bu yöntem arama metnini (sorgu dizesi) ve diğer seçenekleri alır.

SearchResults sınıfı sonuçları temsil eder.

  1. Program.cs'da, arama sonuçlarını konsola yazdıran bir WriteDocuments yöntemi oluşturun.

    // Write search results to console
    private static void WriteDocuments(SearchResults<Hotel> searchResults)
    {
        foreach (SearchResult<Hotel> result in searchResults.GetResults())
        {
            Console.WriteLine(result.Document);
        }
    
        Console.WriteLine();
    }
    
    private static void WriteDocuments(AutocompleteResults autoResults)
    {
        foreach (AutocompleteItem result in autoResults.Results)
        {
            Console.WriteLine(result.Text);
        }
    
        Console.WriteLine();
    }
    
  2. Sorguları yürütmek ve sonuçları döndürmek için bir RunQueries yöntemi oluşturun. Sonuçlar Otel nesneleridir. Bu örnek yöntem imzasını ve ilk sorguyu gösterir. Bu sorgu, belgeden seçilen alanları kullanarak sonucu oluşturmanıza olanak tanıyan Select parametresini gösterir.

    // Run queries, use WriteDocuments to print output
    private static void RunQueries(SearchClient srchclient)
    {
        SearchOptions options;
        SearchResults<Hotel> response;
    
        // Query 1
        Console.WriteLine("Query #1: Search on empty term '*' to return all documents, showing a subset of fields...\n");
    
        options = new SearchOptions()
        {
            IncludeTotalCount = true,
            Filter = "",
            OrderBy = { "" }
        };
    
        options.Select.Add("HotelId");
        options.Select.Add("HotelName");
        options.Select.Add("Address/City");
    
        response = srchclient.Search<Hotel>("*", options);
        WriteDocuments(response);
    
  3. İkinci sorguda terimi arayın, Derecelendirmenin 4'ten büyük olduğu belgeleri seçen bir filtre ekleyin ve ardından Azalan düzende Derecelendirmeye göre sıralayın. Filtre, bir dizindeki IsFilterable alanları üzerinden değerlendirilen bir boole ifadesidir. Filtre sorguları değerleri içerir veya hariç tutar. Bu nedenle, filtre sorgusuyla ilişkilendirilmiş bir ilgi puanı yoktur.

    // Query 2
    Console.WriteLine("Query #2: Search on 'hotels', filter on 'Rating gt 4', sort by Rating in descending order...\n");
    
    options = new SearchOptions()
    {
        Filter = "Rating gt 4",
        OrderBy = { "Rating desc" }
    };
    
    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Rating");
    
    response = srchclient.Search<Hotel>("hotels", options);
    WriteDocuments(response);
    
  4. Üçüncü sorgu, tam metin arama işlemini belirli alanlarla kapsamak için kullanılan searchField'leri gösterir.

    // Query 3
    Console.WriteLine("Query #3: Limit search to specific fields (pool in Tags field)...\n");
    
    options = new SearchOptions()
    {
        SearchFields = { "Tags" }
    };
    
    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Tags");
    
    response = srchclient.Search<Hotel>("pool", options);
    WriteDocuments(response);
    
  5. Dördüncü sorgu, modellerini gösterir ve modelli gezinti yapısını yapılandırmak için kullanılabilir.

     // Query 4
     Console.WriteLine("Query #4: Facet on 'Category'...\n");
    
     options = new SearchOptions()
     {
         Filter = ""
     };
    
     options.Facets.Add("Category");
    
     options.Select.Add("HotelId");
     options.Select.Add("HotelName");
     options.Select.Add("Category");
    
     response = srchclient.Search<Hotel>("*", options);
     WriteDocuments(response);
    
  6. Beşinci sorguda belirli bir belgeyi döndürür. Belge arama, sonuç kümesindeki OnClick olayına verilen tipik bir yanıttır.

     // Query 5
     Console.WriteLine("Query #5: Look up a specific document...\n");
    
     Response<Hotel> lookupResponse;
     lookupResponse = srchclient.GetDocument<Hotel>("3");
    
     Console.WriteLine(lookupResponse.Value.HotelId);
    
  7. Son sorgu otomatik tamamlama söz dizimini gösterir ve dizinde tanımladığınız önericisi ile ilişkilendirilmiş sourceFields içinde iki olası eşleşmeye çözümleyen kısmi bir "sa" kullanıcı girişinin benzetimini gösterir.

     // Query 6
     Console.WriteLine("Query #6: Call Autocomplete on HotelName that starts with 'sa'...\n");
    
     var autoresponse = srchclient.Autocomplete("sa", "sg");
     WriteDocuments(autoresponse);
    
  8. Main() öğesine RunQueries ekleyin.

    // Call the RunQueries method to invoke a series of queries
    Console.WriteLine("Starting queries...\n");
    RunQueries(srchclient);
    
    // End the program
    Console.WriteLine("{0}", "Complete. Press any key to end this program...\n");
    Console.ReadKey();
    

Önceki sorgular sorguda terimleri eşleştirmenin birden çok yolunu gösterir: tam metin araması, filtreler ve otomatik tamamlama.

Tam metin araması ve filtreler SearchClient.Search yöntemi kullanılarak gerçekleştirilir. Arama sorgusu dizede searchText geçirilebilirken SearchOptions sınıfının Filter özelliğinde bir filtre ifadesi geçirilebilir. Arama yapmadan filtrelemek için Search yönteminin searchText parametresini geçirmesi "*" gerekir. Filtreleme olmadan arama yapmak için özelliğini ayarsız bırakın Filter veya bir SearchOptions örneği hiç geçirmeyin.

Programı çalıştırma

Uygulamayı yeniden derlemek ve programı tamamen çalıştırmak için F5 tuşuna basın.

Çıktı, sorgu bilgilerinin ve sonuçların eklenmesiyle birlikte Console.WriteLine'dan gelen iletileri içerir.

Kaynakları temizleme

Kendi aboneliğinizde çalışırken, projenin sonunda oluşturduğunuz kaynaklara hala ihtiyacınız olup olmadığını belirlemek iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kaynakları teker teker silebilir veya tüm kaynak grubunu silerek kaynak kümesinin tamamını kaldırabilirsiniz.

Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak kaynakları portalda bulabilir ve yönetebilirsiniz.

Ücretsiz bir hizmet kullanıyorsanız üç dizin, dizin oluşturucu ve veri kaynağıyla sınırlı olduğunuzu unutmayın. Sınırın altında kalmak için portaldaki tek tek öğeleri silebilirsiniz.

Sonraki adımlar

Bu hızlı başlangıçta, dizin oluşturmak, belgelerle yüklemek ve sorgu çalıştırmak için bir dizi görev üzerinde çalıştınız. Farklı aşamalarda, okunabilirlik ve kavrama kodunu basitleştirmek için kısayolları kullandık. Temel kavramları bildiğinize göre artık bir web uygulamasında Azure AI Arama API'lerini çağıran bir öğreticiyi deneyin.