Azure SQL Veritabanı verileri dizine alın

Bu makalede, Azure SQL Veritabanı veya Azure SQL yönetilen örneğinden içerik içeri aktaran ve Azure AI Search'te aranabilir hale getiren bir dizin oluşturucu yapılandırmayı öğrenin.

Bu makale, Azure SQL'e özgü bilgilerle dizin oluşturucu oluşturma makalesini tamamlar. Azure portalını ve REST API'lerini kullanarak tüm dizin oluşturucular için ortak olan üç parçalı bir iş akışını gösterir: veri kaynağı oluşturma, dizin oluşturma, dizin oluşturucu oluşturma. Dizin Oluşturucu Oluştur isteğini gönderdiğinizde veri ayıklama gerçekleşir.

Bu makalede ayrıca şunlar sağlanır:

Not

Dizin oluşturucu ile gerçek zamanlı veri eşitlemesi mümkün değildir. Dizin oluşturucu en fazla beş dakikada bir tablonuzu yeniden dizine alabilir. Veri güncelleştirmelerinin dizine daha erken yansıtılması gerekiyorsa, güncelleştirilmiş satırları doğrudan göndermenizi öneririz.

Önkoşullar

  • Tek bir tablo veya görünümdeki verileri içeren bir Azure SQL veritabanı ya da genel uç nokta içeren bir SQL Yönetilen Örneği.

    Verileriniz büyükse veya SQL'in yerel değişiklik algılama özelliklerini kullanarak artımlı dizine ihtiyacınız varsa bir tablo kullanın.

    Birden çok tabloya ait verileri birleştirmeniz gerekiyorsa bir görünüm kullanın. Büyük görünümler SQL dizin oluşturucu için ideal değildir. Geçici bir çözüm, yalnızca Azure AI Search dizininize alım için yeni bir tablo oluşturmaktır. Yeni ve değiştirilmiş satırları izlemek için SQL tümleşik değişiklik izleme özelliğini kullanabilirsiniz. Bu, Uygulanması High Water Mark'a göre daha kolaydır.

  • Okuma izinleri. Azure AI Search, kullanıcı adı ve parolanın bağlantı dizesi sağlandığı SQL Server kimlik doğrulamasını destekler. Alternatif olarak, yönetilen kimlik ayarlayabilir ve Azure rollerini kullanabilirsiniz.

Bu makaledeki örnekleri inceleyebilmek için Azure portalına veya REST istemcisine ihtiyacınız vardır. Azure portalını kullanıyorsanız, Azure SQL güvenlik duvarında tüm genel ağlara erişimin etkinleştirildiğinden ve istemcinin bir gelen kuralı üzerinden erişimi olduğundan emin olun. Yerel olarak çalışan bir REST istemcisi için SQL Server güvenlik duvarını, cihazınızın IP adresinden gelen erişime izin verecek şekilde yapılandırın. Azure SQL dizin oluşturucu oluşturmaya yönelik diğer yaklaşımlar arasında Azure SDK'ları bulunur.

Örnek verilerle deneme

Test amacıyla Azure SQL Veritabanı'da tablo oluşturmak ve yüklemek için bu yönergeleri kullanın.

  1. GitHub'dan hotels-azure-sql.sql indirin ve Azure SQL Veritabanı örnek otel veri kümesinin bir alt kümesini içeren bir tablo oluşturun.

  2. Azure portalında oturum açın ve bir Azure SQL veritabanı ve veritabanı sunucusu oluşturun. Hem SQL Server kimlik doğrulamasını hem de Microsoft Entra Id kimlik doğrulamasını yapılandırmayı göz önünde bulundurun. Azure'da rolleri yapılandırma izniniz yoksa geçici çözüm olarak SQL kimlik doğrulamasını kullanabilirsiniz.

  3. Sunucu güvenlik duvarını yerel cihazınızdan gelen tüm istekler için yapılandırın.

  4. Azure SQL veritabanınızda Sorgu düzenleyicisi (önizleme) öğesini ve ardından Yeni Sorgu'yu seçin.

  5. Yapıştırın ve ardından hotels tablosunu oluşturan T-SQL betiğini çalıştırın.

    Transact-SQL
    CREATE TABLE tbl_hotels
     (
         Id TINYINT PRIMARY KEY,
         Modified DateTime NULL DEFAULT '0000-00-00 00:00:00',
         IsDeleted TINYINT,
         HotelName VARCHAR(40),
         Category VARCHAR(20),
         City VARCHAR(30),
         State VARCHAR(4),
         Description VARCHAR(500)
     );
    
  6. Yapıştırın ve ardından kayıtları ekleyen T-SQL betiğini çalıştırın.

    Transact-SQL
     -- Insert rows
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (1, CURRENT_TIMESTAMP, 0,  'Stay-Kay City Hotel', 'Boutique', 'New York', 'NY', 'This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of Americas most attractive and cosmopolitan cities.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (10, CURRENT_TIMESTAMP, 0, 'Countryside Hotel', 'Extended-Stay', 'Durham', 'NC', 'Save up to 50% off traditional hotels. Free WiFi, great location near downtown, full kitchen, washer & dryer, 24\/7 support, bowling alley, fitness center and more.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (11, CURRENT_TIMESTAMP, 0, 'Royal Cottage Resort', 'Extended-Stay', 'Bothell', 'WA', 'Your home away from home. Brand new fully equipped premium rooms, fast WiFi, full kitchen, washer & dryer, fitness center. Inner courtyard includes water features and outdoor seating. All units include fireplaces and small outdoor balconies. Pets accepted.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (12, CURRENT_TIMESTAMP, 0, 'Winter Panorama Resort', 'Resort and Spa', 'Wilsonville', 'OR', 'Plenty of great skiing, outdoor ice skating, sleigh rides, tubing and snow biking. Yoga, group exercise classes and outdoor hockey are available year-round, plus numerous options for shopping as well as great spa services. Newly-renovated with large rooms, free 24-hr airport shuttle & a new restaurant. Rooms\/suites offer mini-fridges & 49-inch HDTVs.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (13, CURRENT_TIMESTAMP, 0, 'Luxury Lion Resort', 'Luxury', 'St. Louis', 'MO', 'Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (14, CURRENT_TIMESTAMP, 0, 'Twin Vortex Hotel', 'Luxury', 'Dallas', 'TX', 'New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (15, CURRENT_TIMESTAMP, 0, 'By the Market Hotel', 'Budget', 'New York', 'NY', 'Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (16, CURRENT_TIMESTAMP, 0, 'Double Sanctuary Resort', 'Resort and Spa', 'Seattle', 'WA', '5 Star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in\/out, Fitness Center & espresso in room.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (17, CURRENT_TIMESTAMP, 0, 'City Skyline Antiquity Hotel', 'Boutique', 'New York', 'NY', 'In vogue since 1888, the Antiquity Hotel takes you back to bygone era. From the crystal chandeliers that adorn the Green Room, to the arched ceilings of the Grand Hall, the elegance of old New York beckons. Elevate Your Experience. Upgrade to a premiere city skyline view for less, where old world charm combines with dramatic views of the city, local cathedral and midtown.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (18, CURRENT_TIMESTAMP, 0, 'Ocean Water Resort & Spa', 'Luxury', 'Tampa', 'FL', 'New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (19, CURRENT_TIMESTAMP, 0, 'Economy Universe Motel', 'Budget', 'Redmond', 'WA', 'Local, family-run hotel in bustling downtown Redmond. We are a pet-friendly establishment, near expansive Marymoor park, haven to pet owners, joggers, and sports enthusiasts. Close to the highway and just a short drive away from major cities.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (20, CURRENT_TIMESTAMP, 0, 'Delete Me Hotel', 'Unknown', 'Nowhere', 'XX', 'Test-case row for change detection and delete detection . For change detection, modify any value, and then re-run the indexer. For soft-delete, change IsDelete from zero to a one, and then re-run the indexer.');
    
    
  7. Karşıya yüklemeyi onaylamak için bir sorgu çalıştırın.

    Transact-SQL
    SELECT Description FROM tbl_hotels;
    

Aşağıdaki ekran görüntüsüne benzer sonuçlar görmeniz gerekir.

Açıklama alanını gösteren sorgu sonuçlarının ekran görüntüsü.

Açıklama alanı en ayrıntılı içeriği sağlar. Tam metin araması ve isteğe bağlı vektörleştirme için bu alanı hedeflemeniz gerekir.

Artık bir veritabanı tablonuz olduğuna göre, verilerinizi dizine almak için Azure portalını, REST istemcisini veya Azure SDK'sını kullanabilirsiniz.

İpucu

Örnek içerik ve kod sağlayan başka bir kaynak Azure-Samples/SQL-AI-samples sayfasında bulunabilir.

Azure portal’ı kullanma

SQL veritabanı tablosundan veya görünümünden dizin oluşturmayı otomatikleştirmek için Verileri içeri aktarma sihirbazını veya Verileri içeri aktarma ve vektörleştirme sihirbazını kullanabilirsiniz. Veri kaynağı yapılandırması her iki sihirbaz için de benzerdir.

  1. Sihirbazı başlatın.

  2. Verilerinize bağlanın sayfasında veri kaynağı türünün Azure SQL Veritabanı veya SQL veritabanı olduğunu seçin veya doğrulayın.

    Veri kaynağı adı, Azure AI Search'teki veri kaynağı bağlantı nesnesine başvurur. Vektör sihirbazını kullanırsanız, veri kaynağı adınız sihirbaz iş akışının sonunda belirtilen özel bir ön ek kullanılarak otomatik olarak oluşturulur.

  3. Sunucu adını, veritabanı adını ve tablo veya görünüm adını belirtin.

    Azure portalı bağlantıyı doğrular. Veritabanı işlem yapılmadığından duraklatıldıysa veritabanı sunucusu sayfasına gidin ve veritabanı durumunun çevrimiçi olduğundan emin olun. Veritabanını etkinleştirmek için herhangi bir tabloda sorgu çalıştırabilirsiniz.

    Azure portalındaki veritabanı durumu sayfasının ekran görüntüsü.

  4. Sunucu kurulumu sırasında tanımlanan sql server oturum açma bilgileri veya yönetilen kimlik gibi bir kimlik doğrulama yöntemi belirtin.

    Azure AI Search'i yönetilen kimlik kullanacak şekilde yapılandırıyorsanız ve veritabanı sunucusunda kimlik için SQL Server Katkıda Bulunanı veya SQL DB Katkıda Bulunanı izinleri veren bir rol ataması oluşturursanız, dizin oluşturucunuz Microsoft Entra Kimliği ve rollerini kullanarak Azure SQL'e bağlanabilir.

  5. Verileri içeri aktarma ve vektörleştirme sihirbazı için değişiklik ve silme izleme seçeneklerini belirtebilirsiniz.

  6. Sihirbazı tamamlamak için kalan adımlarla devam edin:

REST API’leri kullanma

Bu bölümde veri kaynağı, dizin ve dizin oluşturucu oluşturan REST API çağrıları gösterilmektedir.

Veri kaynağını tanımlama

Veri kaynağı tanımı, verilerdeki değişiklikleri tanımlamak için dizine eklenecek verileri, kimlik bilgilerini ve ilkeleri belirtir. Veri kaynağı, birden çok dizin oluşturucu tarafından kullanılabilmesi için bağımsız bir kaynak olarak tanımlanır.

  1. Tanımını ayarlamak için Veri Kaynağı Oluştur veya Veri Kaynağı Oluştur veya Güncelleştir:

    HTTP
     POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
     Content-Type: application/json
     api-key: admin-key
    
     {
         "name" : "myazuresqldatasource",
         "description" : "A database for testing Azure AI Search indexes.",
         "type" : "azuresql",
         "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },
         "container" : { 
             "name" : "name of the table or view that you want to index",
             "query" : null (not supported in the Azure SQL indexer)
             },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. Veri kaynağı için Azure AI Search adlandırma kurallarına uygun benzersiz bir ad sağlayın.

  3. "type" değerini (gerekli) olarak "azuresql" ayarlayın.

  4. "Kimlik bilgilerini" bir bağlantı dizesi olarak ayarlayın:

    • Azure portalından tam erişim bağlantı dizesi alabilirsiniz. ADO.NET connection string seçeneğini kullanın. Kullanıcı adını ve parolayı ayarlayın.

    • Alternatif olarak, aşağıdaki biçime sahip veritabanı gizli dizilerini içermeyen bir yönetilen kimlik bağlantı dizesi belirtebilirsiniz: Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;.

    Daha fazla bilgi için bkz. Yönetilen kimlik kullanarak Azure SQL Veritabanı dizin oluşturucuya bağlanma.

Dizine arama alanları ekleme

Arama dizininde, SQL veritabanındaki alanlara karşılık gelen alanlar ekleyin. Eşdeğer veri türlerini kullanarak arama dizini şemasının kaynak şemayla uyumlu olduğundan emin olun.

  1. Verileri depolayan arama alanlarını tanımlamak için bir dizin oluşturun veya güncelleştirin:

    HTTP
    POST https://[service name].search.windows.net/indexes?api-version=2024-07-01
    Content-Type: application/json
    api-key: [Search service admin key]
    {
        "name": "mysearchindex",
        "fields": [{
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": false
        }, 
        {
            "name": "description",
            "type": "Edm.String",
            "filterable": false,
            "searchable": true,
            "sortable": false,
            "facetable": false,
            "suggestions": true
        }
      ]
    }
    
  2. Her arama belgesini benzersiz olarak tanımlayan bir belge anahtarı alanı ("anahtar": true) oluşturun. Arama dizininde gerekli olan tek alan budur. Genellikle tablonun birincil anahtarı dizin anahtarı alanına eşlenir. Belge anahtarı benzersiz ve null olmayan olmalıdır. Değerler kaynak verilerde sayısal olabilir, ancak arama dizininde anahtar her zaman bir dizedir.

  3. Daha fazla aranabilir içerik eklemek için daha fazla alan oluşturun. Yönergeler için bkz . Dizin oluşturma.

Eşleme veri türleri

SQL veri türü Azure AI Search alan türleri Notlar
bit Edm.Boolean, Edm.String
int, smallint, tinyint Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
gerçek, kayan Edm.Double, Edm.String
smallmoney, para ondalık sayısalı Edm.String Azure AI Search ondalık türlerine Edm.Double dönüştürmeyi desteklemez çünkü bunu yapmak duyarlık kaybına neden olur
char, nchar, varchar, nvarchar Edm.String
Collection(Edm.String)
Dize bir JSON dize dizisini temsil ediyorsa, bir KOLEKSIYON(Edm.String) alanını doldurmak için bir SQL dizesi kullanılabilir: ["red", "white", "blue"]
smalldatetime, datetime, datetime2, date, datetimeoffset Edm.DateTimeOffset, Edm.String
uniqueidentifer Edm.String
coğrafi bölge Edm.GeographyPoint Yalnızca SRID 4326 (varsayılan değer) ile POINT türünde coğrafya örnekleri desteklenir
rowversion Uygulanamaz Satır sürümü sütunları arama dizininde depolanamaz, ancak değişiklik izleme için kullanılabilir
time, timepan, binary, varbinary, image, xml, geometry, CLR types Uygulanamaz Desteklenmez

Azure SQL dizin oluşturucusunu yapılandırma ve çalıştırma

Dizin ve veri kaynağı oluşturulduktan sonra dizin oluşturucuyu oluşturmaya hazır olursunuz. Dizin oluşturucu yapılandırması, çalışma zamanı davranışlarını denetleen girişleri, parametreleri ve özellikleri belirtir.

  1. Dizin oluşturucuya bir ad verip veri kaynağına ve hedef dizine başvurarak dizin oluşturucu oluşturun veya güncelleştirin:

    HTTP
    POST https://[service name].search.windows.net/indexers?api-version=2024-07-01
    Content-Type: application/json
    api-key: [search service admin key]
    {
        "name" : "[my-sqldb-indexer]",
        "dataSourceName" : "[my-sqldb-ds]",
        "targetIndexName" : "[my-search-index]",
        "disabled": null,
        "schedule": null,
        "parameters": {
            "batchSize": null,
            "maxFailedItems": 0,
            "maxFailedItemsPerBatch": 0,
            "base64EncodeKeys": false,
            "configuration": {
                "queryTimeout": "00:04:00",
                "convertHighWaterMarkToRowVersion": false,
                "disableOrderByHighWaterMarkColumn": false
            }
        },
        "fieldMappings": [],
        "encryptionKey": null
    }
    
  2. Parametreler altında yapılandırma bölümünde Azure SQL'e özgü parametreler bulunur:

    • SQL sorgu yürütmesi için varsayılan sorgu zaman aşımı 5 dakikadır ve bunu geçersiz kılabilirsiniz.

    • "convertHighWaterMarkToRowVersion" Yüksek Su İşareti Değişiklik Algılama ilkesi için iyileştirir. Değişiklik algılama ilkeleri veri kaynağında ayarlanır. Yerel değişiklik algılama ilkesini kullanıyorsanız, bu parametrenin hiçbir etkisi yoktur.

    • "disableOrderByHighWaterMarkColumn", yüksek su işareti ilkesi tarafından kullanılan SQL sorgusunun ORDER BY yan tümcesini atlamasına neden olur. Yerel değişiklik algılama ilkesini kullanıyorsanız, bu parametrenin hiçbir etkisi yoktur.

  3. Alan adında veya türünde farklılıklar varsa veya arama dizininde bir kaynak alanın birden çok sürümüne ihtiyacınız varsa alan eşlemelerini belirtin.

  4. Diğer özellikler hakkında daha fazla bilgi için bkz . Dizin oluşturucu oluşturma.

Dizin oluşturucu oluşturulduğunda otomatik olarak çalışır. "Devre dışı" ayarını true olarak ayarlayarak bunu önleyebilirsiniz. Dizin oluşturucu yürütmesini denetlemek için isteğe bağlı olarak bir dizin oluşturucu çalıştırın veya zamanlamaya yerleştirin.

Dizin oluşturucu durumunu denetleme

Dizin oluşturucu durumunu ve yürütme geçmişini izlemek için Azure portalında dizin oluşturucu yürütme geçmişini denetleyin veya Dizin Oluşturucu Durumunu Al REST API isteği gönderin

  1. Arama hizmeti sayfasında Arama yönetimi>Dizin Oluşturucuları'nı açın.

  2. Yapılandırma ve yürütme geçmişine erişmek için bir dizin oluşturucu seçin.

  3. Ayrıntıları, uyarıları ve hataları görüntülemek için belirli bir dizin oluşturucu işi seçin.

Yürütme geçmişi, en son tamamlanan yürütmelerin en son 50'sini içerir ve en son yürütme önce gelecek şekilde ters kronolojik sırada sıralanır.

Yeni, değiştirilmiş ve silinmiş satırları dizine ekleme

SQL veritabanınız değişiklik izlemeyi destekliyorsa, arama dizin oluşturucu sonraki dizin oluşturucu çalıştırmalarında yalnızca yeni ve güncelleştirilmiş içeriği alabilir.

Artımlı dizin oluşturmayı etkinleştirmek için veri kaynağı tanımınızda "dataChangeDetectionPolicy" özelliğini ayarlayın. Bu özellik, dizin oluşturucuya tablonuzda veya görünümünüzde hangi değişiklik izleme mekanizmasının kullanıldığını bildirir.

Azure SQL dizin oluşturucuları için iki değişiklik algılama ilkesi vardır:

  • "SqlIntegratedChangeTrackingPolicy" (yalnızca tablolar için geçerlidir)

  • "HighWaterMarkChangeDetectionPolicy" (tablolar ve görünümler için çalışır)

SQL Tümleşik Değişiklik İzleme İlkesi

Verimliliği ve silinen satırları tanımlama yeteneği için "SqlIntegratedChangeTrackingPolicy" kullanmanızı öneririz.

Veritabanı gereksinimleri:

  • SQL Server 2012 SP3 ve üstü (Azure VM'lerinde SQL Server kullanıyorsanız)
  • Azure SQL Veritabanı veya SQL Yönetilen Örneği
  • Yalnızca tablolar (görünüm yok)
  • Veritabanında, tablo için değişiklik izlemeyi etkinleştirin
  • Tabloda bileşik birincil anahtar (birden fazla sütun içeren birincil anahtar) yok
  • Tabloda kümelenmiş dizin yok. Geçici bir çözüm olarak kümelenmiş tüm dizinlerin bırakılması ve kümelenmemiş dizin olarak yeniden oluşturulması gerekir, ancak kümelenmiş dizine kıyasla kaynakta performans etkilenebilir

Değişiklik algılama ilkeleri veri kaynağı tanımlarına eklenir. Bu ilkeyi kullanmak için veri kaynağınızı şu şekilde oluşturun veya güncelleştirin:

HTTP
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
        }
    }

SQL tümleşik değişiklik izleme ilkesini kullanırken ayrı bir veri silme algılama ilkesi belirtmeyin. SQL tümleşik değişiklik izleme ilkesi, silinen satırları tanımlamaya yönelik yerleşik desteğe sahiptir. Ancak, silinen satırların otomatik olarak algılanması için, arama dizininizdeki belge anahtarı SQL tablosundaki birincil anahtarla aynı olmalıdır.

Not

SQL tablosundan çok sayıda satırı kaldırmak için TRUNCATE TABLE kullanılırken, satır silmeleri almak için değişiklik izleme durumunu sıfırlamak için dizin oluşturucunun sıfırlanması gerekir.

Yüksek Su İşareti Değişiklik Algılama ilkesi

Bu değişiklik algılama ilkesi, tablonuzda veya görünümde bir satırın son güncelleştirildiği sürümü veya saati yakalayan bir "yüksek su işareti" sütununa dayanır. Görünüm kullanıyorsanız yüksek su işareti ilkesi kullanmanız gerekir.

Yüksek su işareti sütunu aşağıdaki gereksinimleri karşılamalıdır:

  • Tüm eklemeler sütun için bir değer belirtir.
  • Bir öğedeki tüm güncelleştirmeler sütunun değerini de değiştirir.
  • Her ekleme veya güncelleştirmede bu sütunun değeri artar.
  • Aşağıdaki WHERE ve ORDER BY yan tümcelerine sahip sorgular verimli bir şekilde yürütülebilir: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Not

Yüksek su işareti sütunu için rowversion veri türünü kullanmanızı kesinlikle öneririz. Başka bir veri türü kullanılırsa, dizin oluşturucu sorgusuyla eşzamanlı olarak yürütülen işlemlerin varlığında değişiklik izlemenin tüm değişiklikleri yakalaması garanti değildir. Salt okunur çoğaltmaları olan bir yapılandırmada rowversion kullanırken, dizin oluşturucuyu birincil çoğaltmaya işaret etmeniz gerekir. Veri eşitleme senaryoları için yalnızca birincil çoğaltma kullanılabilir.

Değişiklik algılama ilkeleri veri kaynağı tanımlarına eklenir. Bu ilkeyi kullanmak için veri kaynağınızı şu şekilde oluşturun veya güncelleştirin:

HTTP
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table or view name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
            "highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
        }
    }

Not

Kaynak tabloda yüksek su işareti sütununda dizin yoksa, SQL dizin oluşturucu tarafından kullanılan sorgular zaman aşımına uğradı. Özellikle, ORDER BY [High Water Mark Column] yan tümcesi, tablo birçok satır içerdiğinde bir dizinin verimli bir şekilde çalışmasını gerektirir.

convertHighWaterMarkToRowVersion

Yüksek su işareti sütunu için rowversion veri türü kullanıyorsanız dizin oluşturucu yapılandırmasında özelliğini ayarlamayı convertHighWaterMarkToRowVersion göz önünde bulundurun. Bu özelliğin true olarak ayarlanması aşağıdaki davranışlara neden olur:

  • Dizin oluşturucu SQL sorgusundaki yüksek su işareti sütunu için rowversion veri türünü kullanır. Doğru veri türünün kullanılması dizin oluşturucu sorgu performansını artırır.

  • Dizin oluşturucu sorgusu çalışmadan önce rowversion değerinden bir tane çıkarır. Bire çok birleşimleri olan görünümlerde yinelenen rowversion değerlerine sahip satırlar olabilir. Birinin çıkarılması, dizin oluşturucu sorgusunun bu satırları kaçırmamasını sağlar.

Bu özelliği etkinleştirmek için dizin oluşturucuyu aşağıdaki yapılandırmayla oluşturun veya güncelleştirin:

HTTP
    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "convertHighWaterMarkToRowVersion" : true } }
    }

queryTimeout

Zaman aşımı hatalarıyla karşılaşırsanız dizin oluşturucu yapılandırma ayarını varsayılan 5 dakikalık zaman aşımından daha yüksek bir değere ayarlayın queryTimeout . Örneğin, zaman aşımını 10 dakikaya ayarlamak için dizin oluşturucuyu aşağıdaki yapılandırmayla oluşturun veya güncelleştirin:

HTTP
    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "queryTimeout" : "00:10:00" } }
    }

disableOrderByHighWaterMarkColumn

Yan tümcesini ORDER BY [High Water Mark Column] de devre dışı bırakabilirsiniz. Ancak dizin oluşturucu yürütmesi bir hatayla kesildiğinde dizin oluşturucunun kesintiye uğradığı sırada neredeyse tüm satırları zaten işlemiş olsa bile daha sonra çalıştırılırsa tüm satırları yeniden işlemesi gerektiğinden bu önerilmez. Yan tümcesini ORDER BY devre dışı bırakmak için dizin oluşturucu tanımındaki ayarı kullanın disableOrderByHighWaterMarkColumn :

HTTP
    {
     ... other indexer definition properties
     "parameters" : {
            "configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
    }

Geçici Silme Sütunu Silme Algılama ilkesi

Satırlar kaynak tablodan silindiğinde, bu satırları arama dizininden de silmek isteyebilirsiniz. SQL tümleşik değişiklik izleme ilkesini kullanırsanız, bu sizin için halledilir. Ancak, yüksek su işareti değişiklik izleme ilkesi silinen satırlarda size yardımcı olmaz. Ne yapmalı?

Satırlar tablodan fiziksel olarak kaldırılırsa, Azure AI Search'ün artık mevcut olmayan kayıtların varlığını çıkarsama yolu yoktur. Ancak, satırları tablodan kaldırmadan mantıksal olarak silmek için "geçici silme" tekniğini kullanabilirsiniz. Tablonuza bir sütun ekleyin veya bu sütunu kullanarak satırları silindi olarak işaretleyin.

Geçici silme tekniğini kullanırken, veri kaynağını oluştururken veya güncelleştirirken geçici silme ilkesini aşağıdaki gibi belirtebilirsiniz:

HTTP
    {
        …,
        "dataDeletionDetectionPolicy" : {
           "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
           "softDeleteColumnName" : "[a column name]",
           "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
        }
    }

softDeleteMarkerValue, veri kaynağınızın JSON gösteriminde bir dize olmalıdır. Gerçek değerinizin dize gösterimini kullanın. Örneğin, silinen satırların 1 değeriyle işaretlendiği bir tamsayı sütununu kullanıyorsanız kullanın "1". Silinen satırların Boole gerçek değeriyle işaretlendiği bir BIT sütuna sahipseniz, sabit veya "true"dizesini "True" kullanın. Büyük/küçük harf fark etmez.

Azure portalından geçici silme ilkesi ayarlanıyorsa geçici silme işaretçisi değerinin çevresine tırnak işareti eklemeyin. Alan içeriği zaten bir dize olarak anlaşılır ve sizin için otomatik olarak bir JSON dizesine çevrilir. Önceki örneklerde, Azure portalının alanına veya true yazmanız 1True yeterlidir.

SSS

S: Always Encrypted sütunlarını dizine ekleyebilir miyim?

Hayır, Always Encrypted sütunları şu anda Azure AI Search dizin oluşturucuları tarafından desteklenmiyor.

S: Azure'da IaaS VM'lerinde çalışan SQL veritabanlarıyla Azure SQL dizin oluşturucu kullanabilir miyim?

Evet. Ancak, arama hizmetinizin veritabanınıza bağlanmasına izin vermeniz gerekir. Daha fazla bilgi için bkz . Azure AI Search dizin oluşturucudan Azure VM'de SQL Server'a bağlantı yapılandırma.

S: Şirket içinde çalışan SQL veritabanlarıyla Azure SQL dizin oluşturucu kullanabilir miyim?

Doğrudan değil. Veritabanlarınızı İnternet trafiğine açmanız gerekeceğinden doğrudan bağlantı önermiyoruz veya desteklemiyoruz. Müşteriler, Azure Data Factory gibi köprü teknolojilerini kullanarak bu senaryoyla başarılı olmuştur. Daha fazla bilgi için bkz . Azure Data Factory kullanarak Azure AI Search dizinine veri gönderme.

S: Yük devretme kümesinde ikincil çoğaltmayı veri kaynağı olarak kullanabilir miyim?

Duruma göre değişir. Bir tablonun veya görünümün tam dizini için ikincil çoğaltma kullanabilirsiniz.

Artımlı dizin oluşturma için Azure AI Search iki değişiklik algılama ilkesi destekler: SQL tümleşik değişiklik izleme ve Yüksek Su İşareti.

Salt okunur çoğaltmalarda SQL Veritabanı tümleşik değişiklik izlemeyi desteklemez. Bu nedenle, Yüksek Su İşareti ilkesini kullanmanız gerekir.

Standart önerimiz, yüksek su işareti sütunu için rowversion veri türünü kullanmaktır. Ancak rowversion kullanmak, salt okunur çoğaltmalarda MIN_ACTIVE_ROWVERSION desteklenmeyen işleve dayanır. Bu nedenle, rowversion kullanıyorsanız dizin oluşturucuyu birincil çoğaltmaya işaret etmeniz gerekir.

Salt okunur bir çoğaltmada rowversion kullanmayı denerseniz aşağıdaki hatayı alırsınız:

"Değişiklik izleme için rowversion sütunu kullanılması ikincil (salt okunur) kullanılabilirlik çoğaltmalarında desteklenmez. Veri kaynağını güncelleştirin ve birincil kullanılabilirlik çoğaltmasına bir bağlantı belirtin. Geçerli veritabanı 'Updateability' özelliği 'READ_ONLY'" şeklindedir.

S: Yüksek su işareti değişiklik izlemesi için alternatif, rowversion olmayan bir sütun kullanabilir miyim?

Bu önerilmez. Yalnızca rowversion güvenilir veri eşitlemesine izin verir. Ancak, uygulama mantığınıza bağlı olarak, aşağıdakiler güvenli olabilir:

  • Dizin oluşturucu çalıştırıldığında, dizine alınan tabloda bekleyen işlem olmadığından emin olabilirsiniz (örneğin, tüm tablo güncelleştirmeleri bir zamanlamaya göre toplu iş olarak gerçekleşir ve Azure AI Search dizin oluşturucu zamanlaması, tablo güncelleştirme zamanlaması ile çakışmasını önlemek için ayarlanır).

  • Eksik satırları almak için düzenli aralıklarla tam bir yeniden dizin oluşturma işlemi yaparsınız.