Bagikan melalui


Proyeksi indeks di Azure AI Search

Penting

Proyeksi indeks berada dalam pratinjau publik di bawah ketentuan penggunaan tambahan. Ini tersedia melalui pustaka klien portal Azure, pratinjau REST API, portal Azure, dan beta yang telah diperbarui untuk menyertakan fitur.

Proyeksi indeks adalah komponen definisi set keterampilan yang menentukan bentuk indeks sekunder, mendukung pola indeks satu-ke-banyak, di mana konten dari alur pengayaan dapat menargetkan beberapa indeks.

Proyeksi indeks mengambil konten yang diperkaya AI yang dihasilkan oleh alur pengayaan dan mengindeksnya ke dalam indeks sekunder (berbeda dari yang ditargetkan pengindeks secara default) pada layanan pencarian Anda. Proyeksi indeks juga memungkinkan Anda untuk membentuk ulang data sebelum mengindeksnya, dengan cara yang secara unik memungkinkan Anda untuk memisahkan array item yang diperkaya ke dalam beberapa dokumen pencarian dalam indeks target, atau dikenal sebagai pengindeksan "satu-ke-banyak". Pengindeksan "Satu-ke-banyak" berguna untuk skenario pemotongan data, di mana Anda mungkin menginginkan indeks utama untuk konten yang tidak disingkat dan indeks sekunder untuk dipotong.

Jika Anda telah menggunakan keterampilan kognitif di masa lalu, Anda sudah tahu bahwa set keterampilan membuat konten yang diperkaya. Set keterampilan memindahkan dokumen melalui urutan pengayaan yang memanggil transformasi atomik, seperti mengenali entitas atau menerjemahkan teks. Secara default, satu dokumen yang diproses dalam set keterampilan dipetakan ke satu dokumen dalam indeks pencarian. Ini berarti bahwa jika Anda melakukan pemotongan teks input dan kemudian melakukan pengayaan pada setiap gugus, hasilnya dalam indeks saat dipetakan melalui outputFieldMappings adalah array pengayaan yang dihasilkan. Dengan proyeksi indeks, Anda menentukan konteks untuk memetakan setiap potongan data yang diperkaya ke dokumen pencariannya sendiri. Ini memungkinkan Anda menerapkan pemetaan satu-ke-banyak dari data dokumen yang diperkaya ke indeks pencarian.

Definisi proyeksi indeks

Proyeksi indeks didefinisikan di dalam definisi set keterampilan, dan terutama didefinisikan sebagai array pemilih, di mana setiap pemilih sesuai dengan indeks target yang berbeda pada layanan pencarian. Setiap pemilih memerlukan parameter berikut sebagai bagian dari definisinya:

  • targetIndexName: Nama indeks pada layanan pencarian tempat indeks data proyeksi indeks berada.
  • parentKeyFieldName: Nama bidang dalam indeks target yang berisi nilai kunci untuk dokumen induk.
  • sourceContext: Anotasi pengayaan yang menentukan granularitas untuk memetakan data ke dalam dokumen pencarian individual. Untuk informasi selengkapnya, lihat Konteks keterampilan dan bahasa anotasi input.
  • mappings: Array pemetaan data yang diperkaya ke bidang dalam indeks pencarian. Setiap pemetaan terdiri dari:
    • name: Nama bidang dalam indeks pencarian tempat data harus diindeks,
    • source: Jalur anotasi pengayaan tempat data harus ditarik.

Masing-masing mapping juga dapat secara rekursif menentukan data dengan opsional sourceContext dan inputs bidang, mirip dengan penyimpanan pengetahuan atau Keterampilan Pembentuk. Parameter ini memungkinkan Anda membentuk data untuk diindeks ke dalam bidang jenis Edm.ComplexType dalam indeks pencarian.

Indeks yang targetIndexName ditentukan dalam parameter memiliki persyaratan berikut:

  • Harus sudah dibuat pada layanan pencarian sebelum set keterampilan yang berisi definisi proyeksi indeks dibuat.
  • Harus berisi bidang dengan nama yang ditentukan dalam parentKeyFieldName parameter . Bidang ini harus berjenis Edm.String, tidak boleh bidang kunci, dan harus memiliki set yang dapat difilter ke true.
  • Bidang kunci harus memiliki set yang dapat dicari ke true dan didefinisikan dengan penganalisis keyword .
  • Harus memiliki bidang yang ditentukan untuk masing-masing names yang ditentukan dalam mappings, yang tidak satu pun dapat menjadi bidang kunci.

Berikut adalah contoh payload untuk definisi proyeksi indeks yang mungkin Anda gunakan untuk memproyeksikan output halaman individual oleh keterampilan Pisahkan sebagai dokumen mereka sendiri dalam indeks pencarian.

"indexProjections": {
    "selectors": [
        {
            "targetIndexName": "myTargetIndex",
            "parentKeyFieldName": "ParentKey",
            "sourceContext": "/document/pages/*",
            "mappings": [
                {
                    "name": "chunk",
                    "source": "/document/pages/*"
                }
            ]
        }
    ]
}

Menangani dokumen induk

Karena proyeksi indeks secara efektif menghasilkan dokumen "turunan" untuk setiap dokumen "induk" yang berjalan melalui set keterampilan, Anda juga memiliki pilihan berikut tentang cara menangani pengindeksan dokumen "induk".

  • Untuk menyimpan dokumen induk dan anak dalam indeks terpisah, Anda hanya akan memastikan bahwa targetIndexName untuk definisi pengindeks Anda berbeda dari yang targetIndexName ditentukan dalam pemilih proyeksi indeks Anda.

  • Untuk mengindeks dokumen induk dan anak ke dalam indeks yang sama, Anda perlu memastikan bahwa skema untuk indeks target berfungsi dengan definisi pengindeks fieldMappings dan outputFieldMappings definisi pengindeks Anda dan mappings di pemilih proyeksi indeks Anda. Anda kemudian hanya akan memberikan hal yang sama targetIndexName untuk definisi pengindeks dan pemilih proyeksi indeks Anda.

  • Untuk mengabaikan dokumen induk dan hanya mengindeks dokumen anak, Anda masih perlu memberikan targetIndexName dalam definisi pengindeks Anda (Anda hanya dapat memberikan yang sama dengan yang Anda lakukan untuk pemilih proyeksi indeks). Kemudian tentukan objek terpisah parameters di samping definisi Anda selectors dengan kunci yang diatur ke skipIndexingParentDocuments, seperti yang projectionMode ditunjukkan di sini:

    "indexProjections": {
        "selectors": [
            ...
        ],
        "parameters": {
            "projectionMode": "skipIndexingParentDocuments"
        }
    }
    

Anda dapat menggunakan 2023-10-01-Preview atau PRATINJAU REST API yang lebih baru untuk membuat proyeksi indeks melalui penambahan set keterampilan. Kami merekomendasikan API pratinjau terbaru.

Siklus hidup konten

Jika sumber data pengindeks mendukung pelacakan perubahan dan deteksi penghapusan, proses pengindeksan dapat menyinkronkan indeks primer dan sekunder untuk mengambil perubahan tersebut.

Setiap kali Anda menjalankan pengindeks dan set keterampilan, proyeksi indeks diperbarui jika set keterampilan atau data sumber yang mendasarinya telah berubah. Setiap perubahan yang diambil oleh pengindeks disebarluaskan melalui proses pengayaan ke proyeksi dalam indeks, memastikan bahwa data yang Diproyeksikan adalah representasi konten saat ini di sumber data asal.

Catatan

Meskipun Anda dapat mengedit data secara manual dalam dokumen yang diproyeksikan menggunakan API pendorongan indeks, pengeditan apa pun akan ditimpa pada pemanggilan alur berikutnya, dengan asumsi dokumen dalam data sumber diperbarui.

Nilai kunci yang diproyeksikan

Setiap dokumen proyeksi indeks berisi kunci identifikasi unik yang dihasilkan pengindeks untuk memastikan keunikan dan memungkinkan pelacakan perubahan dan penghapusan berfungsi dengan benar. Kunci ini berisi segmen berikut:

  • Hash acak untuk menjamin keunikan. Hash ini berubah jika dokumen induk diperbarui di seluruh pengindeks berjalan.
  • Kunci dokumen induk.
  • Jalur anotasi pengayaan yang mengidentifikasi konteks tempat dokumen tersebut dihasilkan.

Misalnya, jika Anda membagi dokumen induk dengan nilai kunci "123" menjadi empat halaman, dan kemudian masing-masing halaman tersebut diproyeksikan sebagai dokumennya sendiri melalui proyeksi indeks, kunci untuk halaman ketiga teks akan terlihat seperti "01f07abfe7ed_123_pages_2". Jika dokumen induk kemudian diperbarui untuk menambahkan halaman kelima, kunci baru untuk halaman ketiga mungkin, misalnya, menjadi "9d800bdacc0e_123_pages_2", karena nilai hash acak berubah antara pengindeks berjalan meskipun data proyeksi lainnya tidak berubah.

Perubahan atau penambahan

Jika dokumen induk diubah sed sehingga data dalam dokumen indeks yang diproyeksikan berubah (contohnya adalah jika kata diubah di halaman tertentu tetapi tidak ada halaman baru bersih yang ditambahkan), data dalam indeks target untuk proyeksi tertentu tersebut diperbarui untuk mencerminkan perubahan tersebut.

Jika dokumen induk diubah sed sehingga ada dokumen turunan proyeksi baru yang tidak ada sebelumnya (contohnya adalah jika satu atau beberapa halaman bernilai teks ditambahkan ke dokumen), dokumen anak baru tersebut ditambahkan lain kali pengindeks berjalan.

Dalam kedua kasus ini, semua dokumen yang diproyeksikan diperbarui untuk memiliki nilai hash baru dalam kuncinya, terlepas dari apakah konten khusus mereka diperbarui.

Penghapusan

Jika dokumen induk diubah sedemikian sehingga dokumen anak yang dihasilkan oleh proyeksi indeks tidak ada lagi (contohnya adalah jika teks disingkat sehingga ada lebih sedikit gugus daripada sebelumnya), dokumen anak yang sesuai dalam indeks pencarian dihapus. Dokumen anak yang tersisa juga mendapatkan kuncinya diperbarui untuk menyertakan nilai hash baru, meskipun kontennya tidak berubah.

Jika dokumen induk dihapus sepenuhnya dari sumber data, dokumen anak yang sesuai hanya dihapus jika penghapusan terdeteksi oleh definisi sumber data yang dataDeletionDetectionPolicy ditentukan. Jika Anda tidak memiliki dokumen induk yang dataDeletionDetectionPolicy dikonfigurasi dan perlu dihapus dari sumber data, maka Anda harus menghapus dokumen turunan secara manual jika dokumen tersebut tidak lagi diinginkan.