Bagikan melalui


Mengindeks data dari Azure SQL Database

Dalam artikel ini, pelajari cara mengonfigurasi pengindeks yang mengimpor konten dari Azure SQL Database atau instans terkelola Azure SQL dan membuatnya dapat dicari di Azure AI Search.

Artikel ini melengkapi Create an indexer dengan informasi yang khusus untuk Azure SQL. Ini menggunakan API portal Azure dan REST untuk menunjukkan alur kerja tiga bagian yang umum untuk semua pengindeks: membuat sumber data, membuat indeks, membuat pengindeks. Ekstraksi data terjadi saat Anda mengirimkan permintaan Buat Pengindeks.

Artikel ini juga menyediakan:

  • Deskripsi kebijakan deteksi perubahan yang didukung oleh pengindeks Azure SQL sehingga Anda dapat menyiapkan pengindeksan bertambah bertahap.

  • Bagian tanya jawab umum (FAQ) untuk jawaban atas pertanyaan tentang kompatibilitas fitur.

Catatan

Sinkronisasi data real time tidak dimungkinkan dengan pengindeks. Pengindeks dapat mengindeks kembali tabel Anda paling cepat setiap lima menit. Jika pembaruan data perlu tercermin dalam indeks lebih cepat, sebaiknya dorong baris yang diperbarui secara langsung.

Prasyarat

  • Database Azure SQL atau SQL Managed Instance dengan titik akhir publik.

  • Tabel atau tampilan tunggal.

    Gunakan tabel jika data Anda besar atau jika Anda memerlukan pengindeksan bertahap menggunakan kemampuan deteksi perubahan asli SQL (pelacakan perubahan terintegrasi SQL) untuk mencerminkan baris baru, diubah, dan dihapus dalam indeks pencarian.

    Gunakan tampilan jika Anda perlu mengonsolidasikan data dari beberapa tabel. Tampilan besar tidak ideal untuk pengindeks SQL. Solusinya adalah membuat tabel baru hanya untuk penyerapan ke dalam indeks Azure AI Search Anda. Jika Anda memilih untuk menggunakan tampilan, Anda dapat menggunakan High Water Mark untuk deteksi perubahan, tetapi harus menggunakan solusi alternatif untuk deteksi penghapusan.

  • Kunci primer harus bernilai tunggal. Pada tabel, itu juga harus non-kluster untuk pelacakan perubahan terintegrasi SQL penuh.

  • Hak akses baca. Azure AI Search mendukung autentikasi SQL Server, di mana nama pengguna dan kata sandi disediakan di string koneksi. Atau, Anda dapat menyiapkan identitas terkelola dan menggunakan peran Azure dengan keanggotaan dalam peran Kontributor SQL Server atau Kontributor SQL DB .

Untuk mengerjakan contoh dalam artikel ini, Anda memerlukan portal Azure atau klien REST. Jika Anda menggunakan portal Azure, pastikan akses ke semua jaringan publik diaktifkan di firewall Azure SQL dan klien memiliki akses melalui aturan masuk. Untuk klien REST yang berjalan secara lokal, konfigurasikan firewall SQL Server untuk mengizinkan akses masuk dari alamat IP perangkat Anda. Pendekatan lain untuk membuat pengindeks Azure SQL termasuk Azure SDK.

Coba dengan data sampel

Gunakan instruksi ini untuk membuat dan memuat tabel di Azure SQL Database untuk tujuan pengujian.

  1. Unduh hotels-azure-sql.sql dari GitHub untuk membuat tabel di Azure SQL Database yang berisi subset himpunan data hotel sampel.

  2. Masuk ke portal Azure dan buat server dan database Azure SQL. Pertimbangkan untuk mengonfigurasi autentikasi SQL Server dan autentikasi ID Microsoft Entra. Jika Anda tidak memiliki izin untuk mengonfigurasi peran di Azure, Anda dapat menggunakan autentikasi SQL sebagai solusinya.

  3. Konfigurasikan firewall server ke semua permintaan masuk dari perangkat lokal Anda.

  4. Pada database Azure SQL Anda, pilih Editor kueri (pratinjau) lalu pilih Kueri Baru.

  5. Tempelkan lalu jalankan skrip T-SQL yang membuat tabel hotel. Kunci primer yang tidak berkluster adalah persyaratan untuk pelacakan perubahan terintegrasi SQL.

    CREATE TABLE tbl_hotels
     (
         Id TINYINT PRIMARY KEY NONCLUSTERED,
         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. Tempelkan lalu jalankan skrip T-SQL yang menyisipkan rekaman.

     -- 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. Jalankan kueri untuk mengonfirmasi unggahan.

    SELECT Description FROM tbl_hotels;
    

    Anda akan melihat hasil yang mirip dengan cuplikan layar berikut.

    Cuplikan layar hasil kueri memperlihatkan bidang deskripsi.

Bidang Deskripsi menyediakan konten paling verbose. Anda harus menargetkan bidang ini untuk pencarian teks lengkap dan vektorisasi opsional.

Sekarang setelah Anda memiliki tabel database, Anda bisa menggunakan portal Azure, klien REST, atau Azure SDK untuk mengindeks data Anda.

Petunjuk

Sumber daya lain yang menyediakan konten sampel dan kode dapat ditemukan di Azure-Samples/SQL-AI-samples.

Menyiapkan alur pengindeks

Dalam langkah ini, tentukan sumber data, indeks, dan pengindeks.

  1. Pastikan database SQL Anda aktif dan tidak dijeda karena tidak aktif. Di portal Microsoft Azure, navigasikan ke halaman server database dan verifikasi status database online. Anda bisa menjalankan kueri pada tabel apa pun untuk mengaktifkan database.

    Cuplikan layar halaman status database di portal Azure.

  2. Pastikan Anda memiliki tabel atau tampilan yang memenuhi persyaratan untuk pengindeks dan deteksi perubahan.

    Pertama, Anda hanya dapat mengambil data dari satu tabel atau view. Kami merekomendasikan tabel karena mendukung kebijakan pelacakan perubahan terintegrasi SQL, yang mendeteksi baris baru, diperbarui, dan dihapus. Kebijakan tanda air tinggi tidak mendukung penghapusan baris dan lebih sulit diterapkan.

    Kedua, kunci primer harus berupa nilai tunggal (kunci gabungan tidak didukung) dan tidak berkluster.

  3. Beralih ke layanan pencarian Anda dan buat sumber data. Di bawahSumber data>, pilih Tambahkan sumber data:

    1. Untuk jenis sumber data, pilih Azure SQL Database.
    2. Berikan nama untuk objek sumber data di Azure AI Search.
    3. Gunakan menu dropdown untuk memilih langganan, jenis akun, server, database, tabel atau tampilan, skema, dan nama tabel.
    4. Untuk pelacakan perubahan, kami merekomendasikan Kebijakan Pelacakan Perubahan Terintegrasi SQL.
    5. Untuk autentikasi, sebaiknya sambungkan dengan identitas terkelola. Layanan pencarian Anda harus memiliki kontributor SQL Server atau keanggotaan peran Kontributor SQL DB pada database.
    6. Pilih Buat untuk membuat sumber data.

    Cuplikan layar halaman pembuatan sumber data di portal Microsoft Azure.

  4. Mulai penyiapan wizard Impor data untuk membuat indeks dan proses pengindeksan.

    1. Pada halaman Gambaran Umum, pilih Impor data.
    2. Pilih sumber data yang baru saja Anda buat, dan pilih Berikutnya.
    3. Lewati halaman Tambahkan keterampilan kognitif (Opsional).
    4. Pada Kustomisasi indeks target, beri nama indeks, atur kunci ke kunci utama Anda dalam tabel, lalu grup pilih Dapat Diambil dan Dapat Dicari untuk semua bidang, dan secara opsional menambahkan Filterable dan Sortable untuk string pendek atau nilai numerik.
    5. Pada Buat pengindeks, beri nama pengindeks dan pilih Kirim.

Periksa status pengindeks

Untuk memantau status pengindeks dan riwayat eksekusi, periksa riwayat eksekusi pengindeks di portal Azure, atau kirim permintaan Get Indexer Status REST API

  1. Pada halaman layanan pencarian, buka manajemen pencarian>Pengindeks.

  2. Pilih pengindeks untuk mengakses konfigurasi dan riwayat eksekusi.

  3. Pilih pekerjaan pengindeks tertentu untuk melihat detail, peringatan, dan kesalahan.

Riwayat eksekusi berisi hingga 50 eksekusi yang terakhir selesai, yang diurutkan dalam urutan kronologis terbalik sehingga eksekusi terbaru menjadi yang pertama.

Mengindeks baris baru, diubah, dan dihapus

Jika database SQL Anda mendukung pelacakan perubahan, pengindeks pencarian dapat mengambil hanya konten baru dan yang diperbarui setiap kali pengindeks dijalankan.

Untuk mengaktifkan pengindeksan inkremental, atur properti "dataChangeDetectionPolicy" dalam definisi sumber data Anda. Properti ini memberi tahu pengindeks mekanisme pelacakan perubahan mana yang digunakan pada tabel atau tampilan Anda.

Untuk pengindeks Azure SQL, ada dua kebijakan deteksi perubahan:

  • "SqlIntegratedChangeTrackingPolicy" (hanya berlaku untuk tabel)

  • "HighWaterMarkChangeDetectionPolicy" (berfungsi untuk tampilan)

Kebijakan Pelacakan Perubahan Terintegrasi SQL

Sebaiknya gunakan "SqlIntegratedChangeTrackingPolicy" untuk efisiensi dan kemampuannya untuk mengidentifikasi baris yang dihapus.

Persyaratan database:

  • Azure SQL Database atau SQL Managed Instance. SQL Server 2016 atau yang lebih baru jika Anda menggunakan Azure VM.
  • Database harus mengaktifkan pelacakan perubahan
  • Tabel saja (tanpa tampilan).
  • Tabel tidak dapat diklusterkan. Untuk memenuhi persyaratan ini, hilangkan indeks berkluster dan buat ulang sebagai indeks non-kluster. Solusi ini sering menurunkan performa. Menduplikasi konten dalam tabel kedua yang didedikasikan untuk pemrosesan pengindeks dapat menjadi mitigasi yang berguna.
  • Tabel tidak boleh kosong. Jika Anda menggunakan TRUNCATE TABLE untuk menghapus baris, reset dan eksekusi ulang pengindeks tidak akan menghapus dokumen pencarian yang sesuai. Untuk menghapus dokumen pencarian tanpa sumber, Anda harus mengindeksnya dengan tindakan hapus.
  • Kunci primer tidak dapat menjadi kunci gabungan (berisi lebih dari satu kolom).
  • Kunci primer harus non-kluster jika Anda ingin deteksi penghapusan.

Kebijakan deteksi perubahan ditambahkan ke definisi sumber data. Untuk menggunakan kebijakan ini, edit definisi sumber data di portal Microsoft Azure, atau gunakan REST untuk memperbarui sumber data Anda seperti ini:

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

Saat menggunakan kebijakan pelacakan perubahan terintegrasi SQL, jangan tentukan kebijakan deteksi penghapusan data terpisah. Kebijakan pelacakan perubahan terintegrasi SQL memiliki dukungan bawaan untuk mengidentifikasi baris yang dihapus. Namun, agar baris yang dihapus terdeteksi secara otomatis, kunci dokumen dalam indeks pencarian Anda harus sama dengan kunci utama dalam tabel SQL, dan kunci utama harus non-kluster.

Kebijakan Deteksi Perubahan Tanda Air Tinggi

Kebijakan deteksi perubahan ini mengandalkan kolom "tolok ukur" di tabel atau tampilan Anda yang merekam versi atau waktu ketika baris terakhir diperbaharui. Jika Anda menggunakan tampilan, Anda harus menggunakan kebijakan "high water mark".

Kolom tanda air tinggi harus memenuhi persyaratan berikut:

  • Semua sisipan menentukan nilai untuk kolom.
  • Semua pembaruan pada item juga mengubah nilai kolom.
  • Nilai kolom ini meningkat seiring masing-masing sisipan atau pembaruan.
  • Kueri dengan klausa WHERE dan ORDER BY berikut dapat dieksekusi secara efisien: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Catatan

Kami sangat menyarankan penggunaan jenis data rowversion untuk kolom batas maksimum. Jika ada jenis data lain yang digunakan, pelacakan perubahan tidak dapat dipastikan menangkap semua perubahan ketika transaksi dijalankan bersamaan dengan kueri pengindeks. Saat menggunakan rowversion dalam konfigurasi dengan replika baca-saja, Anda harus mengarahkan pengindeks ke replika utama. Hanya replika utama yang dapat digunakan untuk skenario sinkronisasi data.

Kebijakan deteksi perubahan ditambahkan ke definisi sumber data. Untuk menggunakan kebijakan ini, buat atau perbarui sumber data Anda seperti ini:

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]"
        }
    }

Catatan

Jika tabel sumber tidak memiliki indeks pada kolom tanda air tinggi, kueri yang digunakan oleh pengindeks SQL mungkin kehabisan waktu. Secara khusus, ORDER BY [High Water Mark Column] klausa mengharuskan indeks berjalan secara efisien ketika tabel berisi banyak baris.

convertHighWaterMarkToRowVersion

Jika Anda menggunakan jenis data rowversion untuk kolom tanda batas, pertimbangkan untuk mengatur properti convertHighWaterMarkToRowVersion dalam konfigurasi pengindeks. Mengatur properti ini ke true menghasilkan perilaku berikut:

  • Menggunakan jenis data rowversion untuk kolom penanda batas tertinggi dalam kueri SQL pengindeks. Penggunaan jenis data yang benar meningkatkan kinerja kueri pengindeks.

  • Mengurangi satu dari nilai rowversion sebelum kueri pengindeks berjalan. Tampilan dengan join satu-ke-banyak mungkin memiliki baris dengan nilai rowversion yang duplikat. Mengurangi satu memastikan kueri pengindeks tidak melewatkan baris ini.

Untuk mengaktifkan properti ini, buat atau perbarui pengindeks dengan konfigurasi berikut:

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

queryTimeout

Jika Anda mengalami kesalahan waktu habis, atur pengaturan konfigurasi queryTimeout untuk pengindeksan ke nilai yang lebih tinggi dari batas waktu default 5 menit. Contohnya, untuk mengatur waktu habis menjadi 10 menit, buat atau perbarui pengindeks dengan konfigurasi berikut:

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

NonaktifkanUrutkanMenurutKolomAmbangBatasTinggi

Anda juga dapat menonaktifkan klausa ORDER BY [High Water Mark Column]. Namun, ini tidak disarankan karena jika eksekusi pengindeks terganggu oleh kesalahan, pengindeks harus memproses ulang semua baris jika dijalankan kemudian, bahkan jika pengindeks telah memproses hampir semua baris pada saat terganggu. Untuk menonaktifkan klausa ORDER BY, gunakan pengaturan disableOrderByHighWaterMarkColumn dalam definisi pengindeks:

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

Kebijakan Deteksi Penghapusan Kolom dengan Penghapusan Sementara

Ketika baris dihapus dari tabel sumber, Anda biasanya juga ingin menghapus baris tersebut dari indeks pencarian. Jika Anda menggunakan kebijakan pelacakan perubahan terintegrasi SQL, penghapusan ini akan dilakukan otomatis. Akan tetapi, kebijakan pelacakan perubahan tanda air tinggi tidak akan membantu Anda dengan baris yang dihapus. Apa yang harus dilakukan?

Jika baris dihapus secara fisik dari tabel, Azure AI Search tidak memiliki cara untuk menyimpulkan adanya rekaman yang tidak ada lagi. Akan tetapi, Anda dapat menggunakan teknik "penghapusan sementara" untuk menghapus baris secara logis tanpa menghapusnya dari tabel. Tambahkan kolom ke tabel Anda atau tampilkan dan tandai baris sebagai dihapus menggunakan kolom tersebut.

Ketika menggunakan teknik penghapusan sementara, Anda dapat menentukan kebijakan penghapusan sementara sebagai berikut saat membuat atau memperbarui sumber data:

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

softDeleteMarkerValue harus berupa string dalam representasi JSON sumber data Anda. Gunakan representasi string dari nilai aktual Anda. Contohnya, jika Anda memiliki kolom bilangan bulat di mana baris yang dihapus ditandai dengan nilai 1, gunakan "1". Jika Anda memiliki kolom BIT di mana baris yang dihapus ditandai dengan nilai Boolean sejati, gunakan string literal "True" atau "true", tanpa memedulikan masalahnya.

Jika Anda menyiapkan kebijakan penghapusan sementara dari portal Azure, jangan tambahkan tanda kutip di sekitar nilai penanda penghapusan sementara. Konten bidang sudah dipahami sebagai string dan diterjemahkan secara otomatis ke dalam string JSON untuk Anda. Dalam contoh sebelumnya, cukup ketik 1, True atau true ke bidang portal Azure.

FAQ

T: Bisakah saya mengindeks kolom Always Encrypted?

Tidak, kolom Always Encrypted saat ini tidak didukung oleh pengindeks Azure AI Search.

T: Bisakah saya menggunakan pengindeks Azure SQL dengan database SQL yang berjalan di IaaS VM di Azure?

Ya. Akan tetapi, Anda perlu mengizinkan layanan pencarian Anda terhubung ke database Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi koneksi dari pengindeks Azure AI Search ke SQL Server di Azure VM.

T: Bisakah saya menggunakan pengindeks Azure SQL dengan database SQL yang berjalan on-premise?

Tidak secara langsung. Kami tidak merekomendasikan atau mendukung koneksi langsung, karena hal itu akan mengharuskan Anda untuk membuka database Anda ke lalu lintas Internet. Konsumen telah berhasil dengan skenario penggunaan teknologi jembatan seperti Azure Data Factory ini. Untuk informasi selengkapnya, lihat Mendorong data ke indeks Pencarian Azure AI menggunakan Azure Data Factory.

T: Bisakah saya menggunakan replika sekunder dalam kluster failover sebagai sumber data?

Tergantung. Untuk pengindeksan penuh dari tabel atau tampilan, Anda bisa menggunakan replika sekunder.

Untuk pengindeksan bertahap, Azure AI Search mendukung dua kebijakan deteksi perubahan: Pelacakan perubahan terintegrasi SQL dan Tanda Air Tinggi.

Pada replika baca-saja, SQL Database tidak mendukung pelacakan perubahan terintegrasi. Oleh karena itu, Anda harus menggunakan kebijakan High Water Mark.

Rekomendasi standar kami adalah menggunakan jenis data rowversion untuk kolom penanda batas perubahan. Namun, menggunakan fungsi MIN_ACTIVE_ROWVERSION bergantung pada rowversion, yang tidak didukung pada replika baca-saja. Oleh karena itu, Anda harus mengarahkan pengindeks ke replika utama jika Anda menggunakan rowversion.

Jika Anda mencoba menggunakan rowversion pada replika baca-saja, Anda mendapatkan kesalahan berikut:

"Menggunakan kolom rowversion untuk pelacakan perubahan tidak didukung pada replika ketersediaan sekunder (baca-saja). Perbarui sumber data dan tentukan koneksi ke replika ketersediaan utama. Properti 'Kemampuan Pembaruan' database saat ini adalah 'READ_ONLY'".

T: Apakah saya dapat menggunakan kolom alternatif non-rowversion untuk pelacakan perubahan marka batas tertinggi?

Tidak disarankan. Sinkronisasi data yang andal hanya dimungkinkan oleh rowversion. Namun, tergantung pada logika aplikasi Anda, dapat aman jika:

  • Anda dapat memastikan bahwa ketika pengindeks berjalan, tidak ada transaksi terutang pada tabel yang sedang diindeks (misalnya, semua pembaruan tabel terjadi sebagai batch pada jadwal, dan jadwal pengindeks Azure AI Search diatur untuk menghindari tumpang tindih dengan jadwal pembaruan tabel).

  • Anda secara berkala melakukan pengindeksan ulang penuh untuk mengambil baris yang terlewat.