Hızlı Başlangıç: Eski Microsoft.Azure.Search v10 istemci kitaplığını kullanarak arama dizini oluşturma

Bu makale, eski Microsoft.Azure.Search (sürüm 10) istemci kitaplığının C# hızlı başlangıcıdır ve artık Azure.Search.Documents (sürüm 11) istemci kitaplığının yerini alır.

Not

Mevcut veya uçak içi geliştirme projeleriniz varsa, 10 sürümünü kullanmaya devam edebilirsiniz. Ancak yeni projeler veya yeni özellikleri kullanmak için yeni kitaplığa geçiş yapmalısınız.

Bu hızlı başlangıç hakkında

C# dilinde Visual Studio ve Microsoft.Azure.Search istemci kitaplıklarını kullanarak bir Azure Bilişsel Arama dizini oluşturan, yükleyen ve sorgulayan bir .NET Core konsol uygulaması oluşturun.

Bu makalede uygulamanın nasıl oluşturulacağı açıklanır. Ayrıca uygulamanın tamamını indirip çalıştırabilirsiniz.

Not

Bu makaledeki tanıtım kodu, kolaylık sağlamak için Azure Bilişsel Arama sürüm 10 .NET SDK'nın zaman uyumlu yöntemlerini kullanır. Ancak üretim senaryolarında, zaman uyumsuz yöntemleri kendi uygulamalarınızda kullanarak bunları ölçeklenebilir ve duyarlı tutmanızı öneririz. Örneğin, ve yerine Create ve DeleteAsyncDeletekullanabilirsinizCreateAsync.

Önkoşullar

Başlamadan önce aşağıdakilere sahip olmanız gerekir:

Anahtar ve URL alma

Hizmete yapılan çağrılar, her istekte bir URL uç noktası ve erişim anahtarı gerektirir. Her ikisiyle de bir arama hizmeti oluşturulur, bu nedenle aboneliğinize Azure Bilişsel Arama eklediyseniz gerekli bilgileri almak için şu adımları izleyin:

  1. Azure portal oturum açın ve arama hizmeti Genel Bakış sayfanızda URL'yi alın. Örnek uç nokta https://mydemo.search.windows.net şeklinde görünebilir.

  2. Ayarlar>Keys'te hizmet üzerinde tam haklara sahip bir yönetici anahtarı alın. Bir tane geçirmeniz gerektiğinde iş sürekliliği için sağlanan iki değiştirilebilir yönetici anahtarı vardır. Nesneleri ekleme, değiştirme ve silme isteklerinde birincil veya ikincil anahtarı kullanabilirsiniz.

    Sorgu anahtarını da alın. Salt okunur erişimle sorgu istekleri göndermek en iyi yöntemdir.

Get an HTTP endpoint and access key

Tüm istekler, hizmetinize gönderilen her istekte bir api anahtarı gerektirir. İstek başına geçerli bir anahtara sahip olmak, isteği gönderen uygulama ve bunu işleyen hizmet arasında güven oluşturur.

Ortamınızı ayarlama

başlangıç olarak Visual Studio açın ve .NET Core üzerinde çalışabilen yeni bir Konsol Uygulaması projesi oluşturun.

NuGet paketlerini yükleme

Microsoft.Azure.Search paketi, NuGet paketleri olarak dağıtılan birkaç istemci kitaplığından oluşur.

Bu proje için NuGet paketinin Microsoft.Azure.Search 10 sürümünü ve en son Microsoft.Extensions.Configuration.Json NuGet paketini kullanın.

  1. Araçlar>NuGet Paket Yöneticisi'daÇözüm için NuGet Paketlerini Yönet...'i seçin.

  2. Gözat’a tıklayın.

  3. Sürüm 10'ı arayın Microsoft.Azure.Search ve seçin.

  4. Derlemeyi projenize ve çözümünüze eklemek için sağ taraftaki Yükle'ye tıklayın.

  5. sürümü 2.2.0 veya üzerini seçerek için Microsoft.Extensions.Configuration.Jsonyineleyin.

Azure Bilişsel Arama hizmet bilgileri ekleme

  1. Çözüm Gezgini'da projeye sağ tıklayın ve Yeni Öğe Ekle>... öğesini seçin.

  2. Yeni Öğe Ekle'de, JSON ile ilgili öğe türlerinin listesini döndürmek için "JSON" araması yapın.

  3. JSON Dosyası'nı seçin, dosyayı "appsettings.json" olarak adlandırın ve Ekle'ye tıklayın.

  4. Dosyayı çıkış dizininize ekleyin. appsettings.json dosyasına sağ tıklayın ve Özellikler'i seçin. Çıkış Dizinine Kopyala bölümünde Daha yeniyse Kopyala'yı seçin.

  5. Aşağıdaki JSON dosyasını yeni JSON dosyanıza kopyalayın.

    {
      "SearchServiceName": "<YOUR-SEARCH-SERVICE-NAME>",
      "SearchServiceAdminApiKey": "<YOUR-ADMIN-API-KEY>",
      "SearchIndexName": "hotels-quickstart"
    }
    
  6. Arama hizmeti adını (YOUR-SEARCH-SERVICE-NAME) ve yönetici API anahtarını (YOUR-ADMIN-API-KEY) geçerli değerlerle değiştirin. Hizmet uç noktanız ise https://mydemo.search.windows.nethizmet adı "mydemo" olur.

". sınıfını ekleyin. Method" dosyalarını projenize ekleme

Konsolunda anlamlı bir çıkış oluşturmak için bu adım gereklidir. Sonuçları konsol penceresine yazdırırken, Hotel nesnesinden tek tek alanlar dize olarak döndürülmelidir. Bu adım, gerekli kodu iki yeni dosyaya kopyalayarak gerçekleştirdiğiniz bu görevi gerçekleştirmek için ToString() uygular.

  1. Projenize iki boş sınıf tanımı ekleyin: Address.Methods.cs, Hotel.Methods.cs

  2. Address.Methods.cs dosyasında, aşağıdaki kodla varsayılan içeriğin üzerine yazın , satır 1-25.

  3. Hotel.Methods.cs dosyasında 1-68 arası satırları kopyalayın.

1 - Dizin oluşturma

Oteller dizini, basit bir alanın "HotelName" veya "Description" olduğu basit ve karmaşık alanlardan oluşur ve karmaşık alanlar alt alanları olan bir adres veya bir oda koleksiyonudur. Bir dizin karmaşık türler içerdiğinde, karmaşık alan tanımlarını ayrı sınıflarda yalıtın.

  1. Projenize iki boş sınıf tanımı ekleyin: Address.cs, Hotel.cs

  2. Address.cs dosyasında, aşağıdaki kodla varsayılan içeriğin üzerine yazın:

    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. Hotel.cs dosyasında sınıfı, adres sınıfına başvurular da dahil olmak üzere dizinin genel yapısını tanımlar.

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

    Alandaki öznitelikler, uygulamada nasıl kullanıldığını belirler. Örneğin, özniteliğinin IsSearchable tam metin aramasına eklenmesi gereken her alana atanması gerekir.

    Not

    .NET SDK'sında alanlar açıkça , IsFilterable, IsSortableve IsFacetableolarak IsSearchableözniteliklendirilmelidir. Bu davranış, veri türüne (örneğin, basit dize alanları otomatik olarak aranabilir) dayalı ilişkilendirmeyi örtük olarak etkinleştiren REST API'nin aksinedir.

    Türündeki dizininizdeki string tam olarak bir alan, her belgeyi benzersiz bir şekilde tanımlayan anahtar alan olmalıdır. Bu şemada anahtar şeklindedir HotelId.

    Bu dizinde, açıklama alanları varsayılan standart Lucene çözümleyicisini geçersiz kılmak istediğinizde belirtilen isteğe bağlı analyzer özelliğini kullanır. Alanda description_fr Fransızca metin depolandığı için Fransızca Lucene çözümleyicisi (FrLucene) kullanılıyor. description isteğe bağlı Microsoft dil çözümleyicisini (EnMicrosoft) kullanıyor.

  4. Program.cs dosyasında, uygulamanın yapılandırma dosyasında (appsettings.json) depolanan değerleri kullanarak hizmete bağlanmak için sınıfının bir örneğini SearchServiceClient oluşturun.

    SearchServiceClient, Azure Bilişsel Arama dizinlerini oluşturmak, listelemek, güncelleştirmek veya silmek için ihtiyacınız olan tüm yöntemleri sağlayan bir Indexes özelliğe sahiptir.

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

    Mümkünse, çok fazla bağlantı açmamak için uygulamanızda tek bir örneğini SearchServiceClient paylaşın. Sınıf yöntemleri, bu tür paylaşımı etkinleştirmek için iş parçacığı açısından güvenlidir.

    sınıfının çeşitli oluşturucuları vardır. İstediğiniz oluşturucu, arama hizmeti adınızı ve SearchCredentials nesnesini parametre olarak alır. SearchCredentials, api anahtarınızı sarmalar.

    Dizin tanımında, nesneleri oluşturmanın Field en kolay yolu yöntemini çağırarak FieldBuilder.BuildForType tür parametresi için bir model sınıfı geçirmektir. Bir model sınıfında dizininizin alanlarıyla eşlenen özellikler mevcuttur. Bu eşleme, arama dizininizdeki belgeleri model sınıfınızın örneklerine bağlamanızı sağlar.

    Not

    Bir model sınıfı kullanmayı planlamıyorsanız, Field nesnelerini doğrudan oluşturarak dizininizi tanımlayabilirsiniz. Oluşturucuya alan adını veri türü (veya dize alanları çözümleyicisi) ile birlikte sağlayabilirsiniz. Ayrıca, IsFilterablegibi IsSearchablediğer özellikleri de birkaç adla ayarlayabilirsiniz.

  5. Uygulamayı oluşturmak ve dizini oluşturmak için F5 tuşuna basın.

    Proje başarıyla oluşturulursa, dizini silmek ve oluşturmak için ekrana durum iletileri yazan bir konsol penceresi açılır.

2 - Belgeleri yükleme

Azure Bilişsel Arama belgeler, 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 depolama alanındaki bloblar veya diskteki JSON belgeleri olabilir. Bu örnekte, bir kısayol alıp kodun kendisindeki dört otel için JSON belgeleri ekliyoruz.

Belgeleri karşıya yüklerken bir IndexBatch nesne kullanmanız gerekir. , IndexBatch her biri IndexAction bir belge ve Azure Bilişsel Arama gerçekleştirilecek eylemi (karşıya yükleme, birleştirme, silme ve mergeOrUpload) belirten bir özellik içeren bir nesne koleksiyonu içerir.

  1. Program.cs dosyasında, bir belge dizisi ve dizin eylemleri oluşturun ve diziyi öğesine IndexBatchgeçirin. Aşağıdaki belgeler, otel ve adres sınıfları tarafından tanımlanan otel-hızlı başlangıç dizinine uygundur.

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

    Nesneyi başlatıldıktanIndexBatch sonra, nesnenizde SearchIndexClient çağırarak Documents.Index dizine gönderebilirsiniz. Documents dizininize belge ekleme, değiştirme, silme veya sorgulama yöntemleri sağlayan bir özelliğidir SearchIndexClient .

    trycatch/Yöntemine yapılan çağrıyı çevreleyen Index dizin oluşturma hataları yakalanıyor ve bu durum hizmetiniz ağır yük altındaysa gerçekleşebilir. Üretim kodunda, başarısız olan belgeleri dizine almayı geciktirip yeniden deneyebilir veya örneğin yaptığı gibi günlüğe kaydedip devam edebilir veya uygulamanızın veri tutarlılığı gereksinimlerini karşılayan başka bir şekilde işleyebilirsiniz.

    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.

  2. Program.cs dosyasındaki main dosyasındaki "2 - Belgeleri yükle" satırlarını açın.

    // Uncomment next 3 lines in "2 - Load documents"
    ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName);
    Console.WriteLine("{0}", "Uploading documents...\n");
    UploadDocuments(indexClient);
    
  3. Uygulamayı yeniden derlemek için F5 tuşuna basın.

    Proje başarıyla oluşturulursa, bu kez belgeleri karşıya yüklemeyle ilgili bir iletiyle birlikte durum iletileri yazan bir konsol penceresi açılır. Azure portal arama hizmetine Genel Bakış sayfasında hotels-quickstart dizininde artık 4 belge olmalıdır.

Belge işleme hakkında daha fazla bilgi için bkz. ".NET SDK belgeleri nasıl işler".

3 - Dizin arama

İlk belge dizine eklenir alınmaz 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 yöntemini kullanın Search . Bu yöntem hem arama metnini hem de diğer parametreleri alır.

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

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

    private static void WriteDocuments(DocumentSearchResult<Hotel> searchResults)
    {
        foreach (SearchResult<Hotel> result in searchResults.Results)
        {
            Console.WriteLine(result.Document);
        }
    
        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. Tek tek alanları ortaya getirmek için select parametresini kullanabilirsiniz. Bir alan select parametresine dahil edilmediyse ilgili Hotel özelliği null olur.

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

    Sorguda terim eşleştirmenin iki yolu vardır: tam metin araması ve filtreler. Tam metin arama sorgusu dizininizdeki alanlarda bir veya daha fazla terim IsSearchable arar. Filtre, dizindeki alanlar üzerinde IsFilterable değerlendirilen boole ifadesidir. Tam metin arama ve filtreleri birlikte veya ayrı ayrı kullanabilirsiniz.

    Arama ve filtrelerin her ikisi de Documents.Search yöntemi kullanılarak gerçekleştirilir. Bir arama sorgusu searchText parametresinde geçirilebilirken bir filtre ifadesi SearchParameters sınıfının Filter özelliğinden geçirilebilir. Arama yapmadan filtrelemek üzere searchText parametresi için "*" geçirmeniz yeterlidir. Filtrelemeden arama yapmak için Filter özelliğini ayarlamadan bırakmanız veya bir SearchParameters örneği geçirmemeniz yeterlidir.

  3. Program.cs dosyasındaki main dosyasındaki "3 - Arama" satırlarını açın.

    // Uncomment next 2 lines in "3 - Search an index"
    Console.WriteLine("{0}", "Searching documents...\n");
    RunQueries(indexClient);
    
  4. Çözüm artık tamamlandı. Uygulamayı yeniden derlemek ve programı tamamen çalıştırmak için F5 tuşuna basın.

    Çıktı, sorgu bilgileri ve sonuçların yanı sıra öncekiyle aynı 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 öğeleri tek tek silebilirsiniz.

Sonraki adımlar

Bu C# hızlı başlangıcında, 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 kodu okunabilirlik ve anlama açısından basitleştirmek için kısayollar kullandık. Temel kavramlardan memnunsanız, bilginizi derinleştirecek alternatif yaklaşımların ve kavramların keşfi için bir sonraki makaleyi öneririz.

Örnek kod ve dizin, bunun genişletilmiş sürümleridir. Sonraki örnek bir Rooms koleksiyonu ekler, farklı sınıflar ve eylemler kullanır ve işlemenin nasıl çalıştığına daha yakından bakar.

Bulut harcamalarınızı iyileştirmek ve tasarruf etmek mi istiyorsunuz?