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 Buat pengindeks dengan informasi 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 dengan data dalam satu tabel atau tampilan, atau SQL Managed Instance dengan titik akhir publik.
Gunakan tabel jika data Anda besar atau jika Anda memerlukan pengindeksan inkremental menggunakan kemampuan deteksi perubahan asli SQL.
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. Anda dapat menggunakan pelacakan perubahan terintegrasi SQL untuk melacak baris baru dan yang diubah, yang lebih mudah diimplementasikan daripada Tanda Air Tinggi.
Izin 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.
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.
Unduh hotels-azure-sql.sql dari GitHub untuk membuat tabel di Azure SQL Database yang berisi subset himpunan data hotel sampel.
Masuk ke portal Azure dan buat database Azure SQL dan server database. 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.
Konfigurasikan firewall server ke semua permintaan masuk dari perangkat lokal Anda.
Pada database Azure SQL Anda, pilih Editor kueri (pratinjau) lalu pilih Kueri Baru.
Tempelkan lalu jalankan skrip T-SQL yang membuat tabel hotel.
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) );
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.');
Jalankan kueri untuk mengonfirmasi unggahan.
SELECT Description FROM tbl_hotels;
Anda akan melihat hasil yang mirip dengan cuplikan layar berikut.
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.
Tip
Sumber daya lain yang menyediakan konten sampel dan kode dapat ditemukan di Azure-Samples/SQL-AI-samples.
Menggunakan portal Azure
Anda bisa menggunakan wizard Impor data atau Wizard impor dan vektorisasi data untuk mengotomatiskan pengindeksan dari tabel atau tampilan database SQL. Konfigurasi sumber data mirip untuk kedua wizard.
Pada Sambungkan ke data Anda, pilih atau verifikasi bahwa jenis sumber data adalah Azure SQL Database atau database SQL.
Nama sumber data mengacu pada objek koneksi sumber data di Azure AI Search. Jika Anda menggunakan wizard vektor, nama sumber data Anda dibuat secara otomatis menggunakan awalan kustom yang ditentukan di akhir alur kerja wizard.
Tentukan nama server, nama database, dan nama tabel atau tampilan.
portal Azure memvalidasi koneksi. Jika database dijeda karena tidak aktif, navigasikan ke halaman server database dan pastikan status database online. Anda bisa menjalankan kueri pada tabel apa pun untuk mengaktifkan database.
Tentukan metode autentikasi, login SQL Server yang ditentukan selama penyiapan server, atau identitas terkelola.
Jika Anda mengonfigurasi Azure AI Search untuk menggunakan identitas terkelola, dan Anda membuat penetapan peran di server database yang memberikan izin Kontributor SQL Server atau Kontributor SQL DB ke identitas, pengindeks Anda dapat tersambung ke Azure SQL menggunakan ID dan peran Microsoft Entra.
Untuk wizard Impor dan vektorisasi data, Anda bisa menentukan opsi untuk pelacakan perubahan dan penghapusan.
Pelacakan penghapusan didasarkan pada penghapusan sementara menggunakan metadata kustom.
Pelacakan perubahan didasarkan pada pelacakan perubahan terintegrasi SQL Server atau pelacakan perubahan tanda air tinggi.
Lanjutkan dengan langkah-langkah yang tersisa untuk menyelesaikan wizard:
Menggunakan REST API
Bagian ini menunjukkan panggilan REST API yang membuat sumber data, indeks, dan pengindeks.
Menentukan sumber data
Definisi sumber data menentukan data untuk mengindeks, kredensial, dan kebijakan untuk mengidentifikasi perubahan dalam data. Sumber data didefinisikan sebagai sumber daya independen sehingga dapat digunakan oleh beberapa pengindeks.
Buat Sumber Data atau Buat atau Perbarui Sumber Data untuk mengatur definisinya:
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 }
Berikan nama unik untuk sumber data yang mengikuti konvensi penamaan Azure AI Search.
Atur "jenis" ke
"azuresql"
(diperlukan).Atur "kredensial" ke string koneksi:
Anda bisa mendapatkan string koneksi akses penuh dari portal Azure. Gunakan
ADO.NET connection string
opsi tersebut. Atur nama pengguna dan kata sandi.Atau, Anda dapat menentukan identitas terkelola string koneksi yang tidak menyertakan rahasia database dengan format berikut:
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;
.
Untuk informasi selengkapnya, lihat Menyambungkan ke pengindeks Azure SQL Database menggunakan identitas terkelola.
Menambahkan bidang pencarian ke indeks
Dalam indeks pencarian, tambahkan bidang yang sesuai dengan bidang dalam database SQL. Pastikan bahwa skema indeks pencarian kompatibel dengan skema sumber dengan menggunakan jenis data yang setara.
Buat atau perbarui indeks untuk menentukan bidang pencarian yang menyimpan data:
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 } ] }
Buat bidang kunci dokumen ("kunci": true) yang secara unik mengidentifikasi setiap dokumen pencarian. Ini adalah satu-satunya bidang yang diperlukan dalam indeks pencarian. Biasanya, kunci primer tabel dipetakan ke bidang kunci indeks. Kunci dokumen harus unik dan tidak null. Nilai dapat berupa numerik dalam data sumber, tetapi dalam indeks pencarian, kunci selalu berupa string.
Buat lebih banyak bidang untuk menambahkan lebih banyak konten yang dapat dicari. Lihat Membuat indeks untuk panduan.
Jenis data pemetaan
Tipe data SQL | Jenis bidang Pencarian Azure AI | Catatan |
---|---|---|
bit | Edm.Boolean, Edm.String | |
int, smallint, tinyint | Edm.Int32, Edm.Int64, Edm.String | |
bigint | Edm.Int64, Edm.String | |
nyata, mengambang | Edm.Double, Edm.String | |
smallmoney, numerik desimal uang | Edm.String | Pencarian Azure AI tidak mendukung konversi jenis desimal ke karena Edm.Double melakukannya akan kehilangan presisi |
char, nchar, varchar, nvarchar | Edm.String Kumpulan(Edm.String) |
String SQL dapat digunakan untuk mengisi bidang Collection(Edm.String ) jika string mewakili array string JSON: ["red", "white", "blue"] |
smalldatetime, datetime, datetime2, date, datetimeoffset | Edm.DateTimeOffset, Edm.String | |
uniqueidentifer | Edm.String | |
geografi | Edm.GeographyPoint | Hanya instans geografi jenis POINT dengan SRID 4326 (yang merupakan default) yang didukung |
rowversion | Tidak berlaku | Kolom versi baris tidak dapat disimpan dalam indeks pencarian, tetapi dapat digunakan untuk pelacakan perubahan |
waktu, jangka waktu, biner, varbinary, gambar, xml, geometri, jenis CLR | Tidak berlaku | Tidak didukung |
Mengonfigurasi dan menjalankan pengindeks Azure SQL
Setelah indeks dan sumber data dibuat, Anda siap untuk membuat pengindeks. Konfigurasi pengindeks menentukan input, parameter, dan properti yang mengontrol perilaku run time.
Buat atau perbarui pengindeks dengan memberinya nama dan mereferensikan sumber data dan indeks target:
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 }
Di bawah parameter, bagian konfigurasi memiliki parameter khusus untuk Azure SQL:
Batas waktu kueri default untuk eksekusi kueri SQL adalah 5 menit, yang dapat Anda ambil alih.
"convertHighWaterMarkToRowVersion" mengoptimalkan kebijakan Deteksi Perubahan Tanda Air Tinggi. Kebijakan deteksi perubahan diatur di sumber data. Jika Anda menggunakan kebijakan deteksi perubahan asli, parameter ini tidak berpengaruh.
"disableOrderByHighWaterMarkColumn" menyebabkan kueri SQL yang digunakan oleh kebijakan tanda air tinggi menghilangkan klausa ORDER BY. Jika Anda menggunakan kebijakan deteksi perubahan asli, parameter ini tidak berpengaruh.
Tentukan pemetaan bidang jika ada perbedaan dalam nama atau jenis bidang, atau jika Anda memerlukan beberapa versi bidang sumber dalam indeks pencarian.
Lihat Membuat pengindeks untuk informasi selengkapnya tentang properti lain.
Pengindeks berjalan secara otomatis saat dibuat. Anda dapat mencegahnya dengan mengatur "dinonaktifkan" ke true. Untuk mengontrol eksekusi pengindeks, jalankan pengindeks sesuai permintaan atau letakkan sesuai jadwal.
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
Pada halaman layanan pencarian, buka Pengindeks manajemen>pencarian.
Pilih pengindeks untuk mengakses konfigurasi dan riwayat eksekusi.
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 hanya dapat mengambil konten baru dan yang diperbarui pada pengindeks berikutnya yang 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 tabel dan tampilan)
Kebijakan Pelacakan Perubahan Terintegrasi SQL
Sebaiknya gunakan "SqlIntegratedChangeTrackingPolicy" untuk efisiensi dan kemampuannya untuk mengidentifikasi baris yang dihapus.
Persyaratan database:
- SQL Server 2012 SP3 dan yang lebih baru, jika Anda menggunakan SQL Server di Azure VM
- Azure SQL Database atau SQL Managed Instance
- Tabel saja (tanpa tampilan)
- Pada database, aktifkan pelacakan perubahan untuk tabel
- Tidak ada kunci primer komposit (kunci primer yang berisi lebih dari satu kolom) pada tabel
- Tidak ada indeks berkluster pada tabel. Sebagai solusinya, indeks berkluster apa pun harus dihilangkan dan dibuat ulang sebagai indeks non-kluster, namun, performa mungkin terpengaruh di sumber dibandingkan dengan memiliki indeks berkluster
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 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.
Catatan
Saat menggunakan TRUNCATE TABLE untuk menghapus sejumlah besar baris dari tabel SQL, pengindeks harus di-reset untuk me-reset status pelacakan perubahan untuk mengambil penghapusan baris.
Kebijakan Deteksi Perubahan Tanda Air Tinggi
Kebijakan deteksi perubahan ini bergantung pada kolom "tanda air tinggi" di tabel atau tampilan Anda yang mengambil versi atau waktu saat baris terakhir diperbarui. 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 tanda air tinggi. Jika ada jenis data lain yang digunakan, pelacakan perubahan tidak dijamin untuk menangkap semua perubahan di hadapan transaksi yang 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 air tinggi, pertimbangkan untuk mengatur convertHighWaterMarkToRowVersion
properti dalam konfigurasi pengindeks. Mengatur properti ini ke true menghasilkan perilaku berikut:
Menggunakan jenis data rowversion untuk kolom tanda air tinggi dalam kueri SQL pengindeks. Penggunaan jenis data yang benar meningkatkan kinerja kueri pengindeks.
Mengurangi satu dari nilai rowversion sebelum kueri pengindeks berjalan. Tampilan dengan gabungan satu-ke-banyak mungkin memiliki baris dengan nilai rowversion 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 queryTimeout
pengaturan konfigurasi pengindeks 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" } }
}
disableOrderByHighWaterMarkColumn
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 berjalan nanti, bahkan jika pengindeks telah memproses hampir semua baris pada saat itu terganggu. Untuk menonaktifkan klausa ORDER BY
, gunakan pengaturan disableOrderByHighWaterMarkColumn
dalam definisi pengindeks:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
}
Kebijakan Deteksi Penghapusan Kolom 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 perlindungan kegagalan 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 Tanda Air Tinggi.
Rekomendasi standar kami adalah menggunakan jenis data rowversion untuk kolom tanda air tinggi. Namun, menggunakan rowversion bergantung pada MIN_ACTIVE_ROWVERSION
fungsi , 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: Bisakah saya menggunakan kolom alternatif non-rowversion untuk pelacakan perubahan tanda air tinggi?
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.