Mengindeks data dari server fleksibel Azure Database for MySQL

Penting

Kemampuan ini berada di pratinjau publik di bawah ketentuan penggunaan tambahan. Gunakan PRATINJAU REST API (pratinjau 2020-06-30 atau yang lebih baru) untuk mengindeks konten Anda. Saat ini tidak ada dukungan portal.

Dalam artikel ini, pelajari cara mengonfigurasi pengindeks yang mengimpor konten dari Azure Database for MySQL dan membuatnya dapat dicari di Azure AI Search. Input ke pengindeks adalah baris Anda, dalam satu tabel atau tampilan. Output adalah indeks pencarian dengan konten yang dapat dicari di bidang individual.

Artikel ini melengkapi Buat pengindeks dengan informasi khusus untuk pengindeksan dari server fleksibel Azure Database for MySQL. Ini menggunakan REST API 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.

Saat dikonfigurasi untuk menyertakan tanda air tinggi dan penghapusan sementara, pengindeks mengambil semua perubahan, unggahan, dan penghapusan untuk database MySQL Anda. Ini mencerminkan perubahan ini dalam indeks pencarian Anda. Ekstraksi data terjadi saat Anda mengirimkan permintaan Buat Pengindeks.

Prasyarat

  • Daftarkan pratinjau untuk memberikan umpan balik skenario. Anda dapat mengakses fitur secara otomatis setelah pengiriman formulir.

  • Server fleksibel Azure Database for MySQL dan data sampel. Data harus berada dalam tabel atau tampilan. Kunci primer diperlukan. Jika Anda menggunakan tampilan, tampilan tersebut harus memiliki kolom tanda air tinggi.

  • Izin baca. Akses penuh string koneksi menyertakan kunci yang memberikan akses ke konten, tetapi jika Anda menggunakan peran Azure, pastikan identitas terkelola layanan pencarian memiliki izin Pembaca di MySQL.

  • Klien REST untuk membuat sumber data, indeks, dan pengindeks.

    Anda juga dapat menggunakan Azure SDK untuk .NET. Anda tidak dapat menggunakan portal untuk pembuatan pengindeks, tetapi Anda dapat mengelola pengindeks dan sumber data setelah dibuat.

Batasan pratinjau

Saat ini, pelacakan perubahan dan deteksi penghapusan tidak berfungsi jika tanggal atau tanda waktu seragam untuk semua baris. Batasan ini adalah masalah yang diketahui untuk ditangani dalam pembaruan ke pratinjau. Hingga masalah ini diatasi, jangan tambahkan set keterampilan ke pengindeks MySQL.

Pratinjau tidak mendukung jenis geometri dan blob.

Seperti yang disebutkan, tidak ada dukungan portal untuk pembuatan pengindeks, tetapi pengindeks MySQL dan sumber data dapat dikelola di portal setelah ada. Misalnya, Anda dapat mengedit definisi, dan mengatur ulang, menjalankan, atau menjadwalkan 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 yang independen, sehingga dapat digunakan oleh beberapa pengindeks.

Buat atau Perbarui Sumber Data menentukan definisi. Pastikan untuk menggunakan pratinjau versi REST API (2020-06-30-Preview atau yang lebih baru) saat membuat sumber data.

{   
    "name" : "hotel-mysql-ds",
    "description" : "[Description of MySQL data source]",
    "type" : "mysql",
    "credentials" : { 
        "connectionString" : 
            "Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;" 
    },
    "container" : { 
        "name" : "[TableName]" 
    },
    "dataChangeDetectionPolicy" : { 
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "[HighWaterMarkColumn]"
    }
}

Poin utama:

  • Atur type ke "mysql" (diperlukan).

  • Atur credentials ke ADO.NET string koneksi. Anda dapat menemukan string koneksi di portal Azure, pada halaman string Koneksi ion untuk MySQL.

  • Atur container ke nama tabel.

  • Atur dataChangeDetectionPolicy apakah data volatil dan Anda ingin pengindeks hanya mengambil item baru dan yang diperbarui pada eksekusi berikutnya.

  • Atur dataDeletionDetectionPolicy jika Anda ingin menghapus dokumen pencarian dari indeks pencarian saat item sumber dihapus.

Buat indeks

Buat atau Perbarui Indeks menentukan skema indeks:

{
    "name" : "hotels-mysql-ix",
    "fields": [
        { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
        { "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
        { "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
        { "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false  }     
    ]
}

Jika kunci utama dalam tabel sumber cocok dengan kunci dokumen (dalam hal ini, "ID"), pengindeks mengimpor kunci utama sebagai kunci dokumen.

Jenis data pemetaan

Tabel berikut memetakan database MySQL ke setara Azure AI Search. Untuk informasi selengkapnya, lihat Jenis data yang didukung (Pencarian Azure AI).

Catatan

Pratinjau tidak mendukung jenis geometri dan blob.

Jenis data MySQL Jenis bidang Pencarian Azure AI
bool, boolean Edm.Boolean, Edm.String
tinyint, , smallintmediumint, int, , integer,year Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
float, , doublereal Edm.Double, Edm.String
date, , datetimetimestamp Edm.DateTimeOffset, Edm.String
char, , tinytextvarchar, mediumtext, text, longtext, enum, , set,time Edm.String
unsigned numerical data, serial, decimal, dec, bit, blob, binary, geometry T/A

Mengonfigurasi dan menjalankan pengindeks MySQL

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:

{
    "name" : "hotels-mysql-idxr",
    "dataSourceName" : "hotels-mysql-ds",
    "targetIndexName" : "hotels-mysql-ix",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": null,
        "maxFailedItemsPerBatch": null,
        "base64EncodeKeys": null,
        "configuration": { }
        },
    "fieldMappings" : [ ],
    "encryptionKey": null
}

Poin utama:

Periksa status pengindeks

Kirim permintaan Dapatkan Status Pengindeks untuk memantau eksekusi pengindeks:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-01
  Content-Type: application/json  
  api-key: [admin key]

Respons mencakup status dan jumlah item yang diproses. Ini akan terlihat mirip dengan contoh berikut:

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2024-02-21T00:23:24.957Z",
        "endTime":"2024-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2024-02-21T00:23:24.957Z",
            "endTime":"2024-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

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

Mengindeks baris baru dan yang diubah

Setelah pengindeks mengisi indeks pencarian sepenuhnya, Anda mungkin ingin pengindeks berikutnya berjalan untuk mengindeks secara bertahap hanya baris baru dan yang diubah dalam database Anda.

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

Untuk pengindeks Azure Database for MySQL, satu-satunya kebijakan yang HighWaterMarkChangeDetectionPolicydidukung adalah .

Kebijakan deteksi perubahan pengindeks bergantung pada memiliki kolom tanda air tinggi yang menangkap versi baris, atau tanggal dan waktu saat baris terakhir diperbarui. Sering kali DATEkolom , DATETIME, atau TIMESTAMP pada granularitas yang cukup untuk memenuhi persyaratan kolom tanda air tinggi.

Di database MySQL Anda, kolom tanda air tinggi harus memenuhi persyaratan berikut:

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

Contoh berikut menunjukkan definisi sumber data dengan kebijakan deteksi perubahan:

{
    "name" : "[Data source name]",
    "type" : "mysql",
    "credentials" : { "connectionString" : "[connection string]" },
    "container" : { "name" : "[table or view name]" },
    "dataChangeDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "[last_updated column name]"
    }
}

Penting

Jika Anda menggunakan tampilan, Anda harus menetapkan kebijakan tanda air tinggi di sumber data pengindeks Anda.

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

Mengindeks baris yang dihapus

Saat baris dihapus dari tabel atau tampilan, Anda biasanya ingin menghapus baris tersebut dari indeks pencarian juga. Namun, jika baris dihapus secara fisik dari tabel, pengindeks tidak memiliki cara untuk menyimpulkan adanya rekaman yang tidak ada lagi. Solusinya adalah 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.

Mengingat kolom yang menyediakan status penghapusan, pengindeks dapat dikonfigurasi untuk menghapus dokumen pencarian yang status penghapusannya diatur ke true. Properti konfigurasi yang mendukung perilaku ini adalah kebijakan deteksi penghapusan data, yang ditentukan dalam definisi sumber data sebagai berikut:

{
    …,
    "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. Contohnya, jika Anda memiliki kolom bilangan bulat di mana baris yang dihapus ditandai dengan nilai 1, gunakan "1". Jika Anda memiliki BIT kolom di mana baris yang dihapus ditandai dengan nilai benar Boolean, gunakan string literal True atau true (huruf besar/kecil tidak masalah).

Langkah berikutnya

Anda sekarang dapat menjalankan pengindeks, status pemantauan, atau menjadwalkan eksekusi pengindeks. Artikel berikut ini berlaku untuk pengindeks yang menarik konten dari Azure MySQL: