Eğitici Kılavuz: .NET SDK'sını kullanarak Azure SQL verilerini dizine ekleme

Not

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Azure SQL Veritabanı'den aranabilir verileri ayıklayıp Azure Yapay Zeka Arama arama dizinine göndermek üzere bir indexer yapılandırmayı öğrenin.

Bu öğreticide, .NET için C# ve Azure SDK'sını kullanarak şunları yapabilirsiniz:

  • Azure SQL Veritabanı bağlanan bir veri kaynağı oluşturma
  • Dizin oluşturucu oluşturma
  • Dizine veri yüklemek için dizin oluşturucu çalıştırma
  • Dizini doğrulama adımı olarak sorgulama

Önkoşullar

Not

Bu eğitim için ücretsiz bir arama hizmeti kullanabilirsiniz. Ücretsiz katmanı sizi üç dizin, üç dizin oluşturucu ve üç veri kaynağıyla sınırlar. Bu öğreticide her birinden bir tane oluşturulur. Başlamadan önce, hizmetinizde yeni kaynakları kabul etmek için yer olduğundan emin olun.

Dosyaları indirme

Bu öğreticinin kaynak kodu, Azure-Samples/search-dotnet-getting-started GitHub deposundaki DotNetHowToIndexer klasöründedir.

Hizmet oluşturma

Bu öğreticide dizin oluşturma ve sorgular için Azure Yapay Zeka Arama ve dış veri kaynağı olarak Azure SQL Veritabanı kullanılır. Mümkünse, yakınlık ve yönetilebilirlik için aynı bölgede ve kaynak grubunda her iki hizmeti de oluşturun. Uygulamada Azure SQL Veritabanı, herhangi bir bölgede bulunabilir.

Azure SQL Veritabanı ile başlayın

Bu öğreticide, veritabanını doldurmak için örnek indirmedeki hotels.sql dosyası sağlanır. Azure Yapay Zeka Arama, görünümden veya sorgudan oluşturulan satır kümeleri gibi düzleştirilmiş satır kümelerini tüketir. Örnek çözümdeki SQL dosyası tek bir tablo oluşturur ve doldurur.

Mevcut bir Azure SQL Veritabanı kaynağınız varsa, Open sorgusu adımından başlayarak oteller tablosunu buna ekleyebilirsiniz.

  1. Azure SQL database oluşturma. Veritabanı için sunucu yapılandırması önemlidir:

    • Kullanıcı adı ve parola belirtmenizi isteyen SQL Server kimlik doğrulaması seçeneğini belirleyin. Dizin oluşturucu tarafından kullanılan ADO.NET bağlantı dizesi için buna ihtiyacınız vardır.

    • Bu öğreticiyi tamamlamayı daha kolay hale getiren bir kamu bağlantısı seçin. Üretimde herkese açık önerilmez ve öğreticinin sonunda bu kaynağı silmenizi tavsiye ederiz.

    Sunucu yapılandırmasının ekran görüntüsü.

  2. Azure portalda yeni kaynağa gidin.

  3. İstemcinizden gelen erişime izin veren bir güvenlik duvarı kuralı ekleyin. IP adresinizi almak için komut isteminden komutunu çalıştırabilirsiniz ipconfig .

  4. Örnek verileri yüklemek için Query editor kullanın. Gezinti bölmesinde Query editor (önizleme) öğesini seçin ve sunucu yöneticisinin kullanıcı adını ve parolasını girin.

    Erişim reddedildi hatası alırsanız, hata iletisinden istemci IP adresini kopyalayın, sunucunun ağ güvenlik sayfasını açın ve istemcinizden erişime izin veren bir gelen kuralı ekleyin.

  5. Query editor Open query öğesini seçin ve yerel bilgisayarınızdaki hotels.sql dosyasının konumuna gidin.

  6. Dosyayı seçin ve Aç'ı seçin. Betik aşağıdaki ekran görüntüsüne benzer görünmelidir:

    Sorgu Düzenleyicisi penceresinde SQL betiğinin ekran görüntüsü.

  7. Sorguyu yürütmek için Çalıştır'ı seçin. Sonuçlar bölmesinde, üç satır için sorgu başarılı iletisini görmeniz gerekir.

  8. Bu tablodan bir satır kümesi döndürmek için, doğrulama adımı olarak aşağıdaki sorguyu yürütebilirsiniz:

    SELECT * FROM Hotels
    
  9. Veritabanı için ADO.NET bağlantı dizesi kopyalayın. Settings>Bağlantı Dizeleri altında ADO.NET bağlantı dizesi kopyalayın; bu aşağıdaki örneğe benzer olmalıdır:

    Server=tcp:<YOUR-DATABASE-NAME>.database.windows.net,1433;Initial Catalog=hotels-db;Persist Security Info=False;User ID=<YOUR-USER-NAME>;Password=<YOUR-PASSWORD>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
    

Sonraki adımda ortamınızı ayarlamak için bu bağlantı dizesi ihtiyacınız olacak.

Azure Yapay Zeka Arama, Azure portalında oluşturabileceğiniz sonraki bileşendir. Bu öğreticiyi tamamlamak için Ücretsiz katmanını kullanabilirsiniz.

API çağrıları için hizmet URL'si ve access anahtarı gerekir. Her ikisiyle de bir search service oluşturulur, bu nedenle aboneliğinize Azure Yapay Zeka Arama eklediyseniz, gerekli bilgileri almak için şu adımları izleyin:

  1. Azure portalında arama hizmetinize gidin.

  2. Genel Bakış sayfasında uç nokta URL'sini kopyalayın. Örnek uç nokta https://mydemo.search.windows.net gibi görünebilir.

  3. Ayarlar>Anahtarları'nda, hizmet üzerinde tam haklar için bir yönetici anahtarı alın. Bir tane yuvarlamanız gerektiğinde iş sürekliliği için sağlanan iki değiştirilebilir yönetici anahtarı vardır. İsteklerde nesneleri eklemek, değiştirmek veya silmek için iki anahtardan birini kullanabilirsiniz.

    Bir arama hizmeti için HTTP uç noktasını ve erişim anahtarı konumunu gösteren Azure portal sayfalarının ekran görüntüsü.

Ortamınızı ayarlama

  1. Visual Studio başlatın ve DotNetHowToIndexers.sln açın.

  2. Çözüm Gezgini'da, bağlantı bilgilerini sağlamak için appsettings.json açın.

  3. SearchServiceEndPoint için, hizmetinizdeki Overview sayfasında tam URL https://my-demo-service.search.windows.net ise, URL'nin tamamını sağlayın.

  4. AzureSqlConnectionString için dize biçimi "Server=tcp:<your-database-name>.database.windows.net,1433;Initial Catalog=hotels-db;Persist Security Info=False;User ID=<your-user-name>;Password=<your-password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" benzerdir.

    {
      "SearchServiceEndPoint": "<placeholder-search-full-url>",
      "SearchServiceAdminApiKey": "<placeholder-admin-key-for-search-service>",
      "AzureSqlConnectionString": "<placeholder-ADO.NET-connection-string",
    }
    
  5. SQL bağlantı dizesi kullanıcı parolasını geçerli bir parolayla değiştirin. Veritabanı ve kullanıcı adları kopyalanacak olsa da parolayı el ile girmeniz gerekir.

İşlem hattını oluştur

Dizin oluşturucular bir veri kaynağı nesnesi ve dizin gerektirir. İlgili kod iki dosyada yer alır:

  • hotel.cs dizini tanımlayan bir şema içerir
  • Program.cs hizmetinizde yapı oluşturmaya ve yönetmeye yönelik işlevler içerir

Hotel.cs dosyasında

Dizin şeması, aşağıdaki alan tanımında HotelNamegösterildiği gibi bir alanın tam metin aranabilir, filtrelenebilir veya sıralanabilir olması gibi izin verilen işlemleri belirten öznitelikler de dahil olmak üzere alan koleksiyonunu tanımlar. SearchableField tanımına göre tam metin aranabilir. Diğer öznitelikler açıkça atanır.

. . . 
[SearchableField(IsFilterable = true, IsSortable = true)]
[JsonPropertyName("hotelName")]
public string HotelName { get; set; }
. . .

Şema, arama puanını artırmak için puanlama profilleri ve özel çözümleyiciler gibi diğer öğeleri de içerebilir. Ancak bu öğreticide şema seyrek tanımlanmıştır ve yalnızca örnek veri kümelerinde bulunan alanlardan oluşur.

Program.cs dosyasında

Ana program an dizin oluşturucu istemcisi, dizin, veri kaynağı ve dizin oluşturucu oluşturma mantığını içerir. Kod, bu programı birden çok kez çalıştırabileceğinizi varsayarak aynı ada sahip mevcut kaynakları denetler ve siler.

Veri kaynağı nesnesi, Azure SQL yerleşik change algılama özelliklerini kullanmak için partiyel veya artımlı dizin oluşturma gibi Azure SQL Veritabanı kaynaklara özgü ayarlarla yapılandırılır. Azure SQL'daki kaynak tanıtım otelleri veritabanında IsDeleted adlı bir "geçici silme" sütunu vardır. Bu sütun veritabanında true olarak ayarlandığında, dizin oluşturucu ilgili belgeyi Azure Yapay Zeka Arama dizininden kaldırır.

Console.WriteLine("Creating data source...");

var dataSource =
      new SearchIndexerDataSourceConnection(
         "hotels-sql-ds",
         SearchIndexerDataSourceType.AzureSql,
         configuration["AzureSqlConnectionString"],
         new SearchIndexerDataContainer("hotels"));

indexerClient.CreateOrUpdateDataSourceConnection(dataSource);

Dizin oluşturucu nesnesi, kaynak ne olursa olsun yapılandırma, zamanlama ve çağırmanın aynı olduğu platformdan bağımsızdır. Bu örnek dizin oluşturucu, dizin oluşturucu geçmişini temizleyen bir zamanlama ve sıfırlama seçeneği içerir. Ayrıca dizin oluşturucuyu hemen oluşturmak ve çalıştırmak için bir yöntem çağırır. Dizin oluşturucu oluşturmak veya güncelleştirmek için CreateOrUpdateIndexerAsync kullanın.

Console.WriteLine("Creating Azure SQL indexer...");

var schedule = new IndexingSchedule(TimeSpan.FromDays(1))
{
      StartTime = DateTimeOffset.Now
};

var parameters = new IndexingParameters()
{
      BatchSize = 100,
      MaxFailedItems = 0,
      MaxFailedItemsPerBatch = 0
};

// Indexer declarations require a data source and search index.
// Common optional properties include a schedule, parameters, and field mappings
// The field mappings below are redundant due to how the Hotel class is defined, but 
// we included them anyway to show the syntax 
var indexer = new SearchIndexer("hotels-sql-idxr", dataSource.Name, searchIndex.Name)
{
      Description = "Data indexer",
      Schedule = schedule,
      Parameters = parameters,
      FieldMappings =
      {
         new FieldMapping("_id") {TargetFieldName = "HotelId"},
         new FieldMapping("Amenities") {TargetFieldName = "Tags"}
      }
};

await indexerClient.CreateOrUpdateIndexerAsync(indexer);

Dizin oluşturucu çalıştırmaları genellikle zamanlanır, ancak geliştirme sırasında RunIndexerAsync kullanarak dizin oluşturucuyu hemen çalıştırmak isteyebilirsiniz.

Console.WriteLine("Running Azure SQL indexer...");

try
{
      await indexerClient.RunIndexerAsync(indexer.Name);
}
catch (RequestFailedException ex) when (ex.Status == 429)
{
      Console.WriteLine("Failed to run indexer: {0}", ex.Message);
}

Çözümü oluştur

Çözümü derlemek ve çalıştırmak için F5'i seçin. Program hata ayıklama modunda yürütülür. Konsol penceresinde her işlemin durumu bildirilir.

Programın konsol çıkışını gösteren ekran görüntüsü.

Kodunuz, Visual Studio'da yerel olarak çalışır, Azure'daki arama hizmetinize bağlanır, bu da Azure SQL Veritabanı'na bağlanarak veri kümesini alır. Bu çok sayıda işlemle, birkaç olası hata noktası vardır. Hata alırsanız, önce aşağıdaki koşulları denetleyin:

  • Sağladığınız arama servisi bağlantı ayrıntıları bir tam URL'dir. Yalnızca hizmet adını girdiyseniz, işlemler dizin oluşturma sırasında durur ve bağlanma hatası oluşur.

  • Appsettings.json dosyasındaki veritabanı bağlantı bilgileri. Azure portal'dan elde edilen "ADO.NET bağlantı dizesi", veritabanınız için geçerli bir kullanıcı adı ve parolayı içerecek şekilde değiştirilmelidir. Kullanıcı hesabının verileri alma izni olmalıdır. Yerel istemci IP adresinizin güvenlik duvarı üzerinden gelen erişime izin verilmelidir.

  • Kaynak sınırları. Ücretsiz katmanının üç dizin, dizin oluşturucu ve veri kaynağı sınırı olduğunu hatırlayın. Üst sınırdaki bir hizmet yeni nesneler oluşturamaz.

Nesne oluşturmayı doğrulamak için Azure portal kullanın ve ardından dizini sorgulamak için Search explorer kullanın.

  1. Azure portalında arama hizmetinize gidin.

  2. Nesnelerin oluşturulduğunu doğrulamak için sol bölmeden her sayfayı açın. Dizinler, Dizin Oluşturucular ve Veri Kaynakları sırasıyla hotels-sql-idx, hotels-sql-idxr ve hotels-sql-ds içermelidir.

  3. Dizinler sekmesinde hotels-sql-idx dizinini seçin. Oteller sayfasında, Arama gezgini ilk sekmedir.

  4. Boş bir sorgu göndermek için Ara'yı seçin.

    Dizininizdeki üç girdi, JSON belgeleri olarak döndürülür. Yapının tamamını görebilmeniz için arama gezgini belgeleri JSON olarak döndürür.

    Hedef dizin için Arama Gezgini sorgusunun ekran görüntüsü.

  5. Sorgu parametrelerini girebilmeniz için JSON görünümüne geçin.

    {
         "search": "river",
         "count": true
    }
    

    Bu sorgu teriminde rivertam metin aramasını çağırır. Sonuç, eşleşen belgelerin sayısını içerir. Eşleşen belgelerin sayısını döndürmek, binlerce veya milyonlarca belge içeren büyük bir dizininiz olan test senaryolarında yararlıdır. Bizim örneğimizde, sorguyla eşleşen tek bir belge vardır.

  6. Arama sonuçlarını ilgilendiğin alanlarla sınırlayan parametreler girin.

    {
         "search": "river",
         "select": "hotelId, hotelName, baseRate, description",
         "count": true
    }
    

    Sorgu yanıtı seçili alanlara daraltılır ve sonuçta daha kısa bir çıkış elde edilir.

Sıfırla ve yeniden başlat

Geliştirmenin ilk deneysel aşamalarında, tasarım yinelemesi için en pratik yaklaşım nesneleri Azure Yapay Zeka Arama silmek ve kodunuzun bunları yeniden oluşturmasına izin vermektir. Kaynak adları benzersizdir. Bir nesneyi sildiğinizde, aynı adı kullanarak nesneyi yeniden oluşturabilirsiniz.

Bu öğreticinin örnek kodu, mevcut nesneleri denetler ve kodunuzu yeniden çalıştırabilmeniz için bunları siler.

Dizinleri, dizin oluşturucuları ve veri kaynaklarını silmek için de Azure portal kullanabilirsiniz.

Kaynakları temizleme

Kendi aboneliğinizde çalışırken, bir proje sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir uygulamadır. Ç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ı Azure portal bulabilir ve yönetebilirsiniz.

Sonraki adımlar

Artık SQL Veritabanı dizinlemenin temellerini bildiğinize göre, dizinleyici yapılandırmasına daha yakından bakın.