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 berjenisEdm.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
name
s yang ditentukan dalammappings
, 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 yangtargetIndexName
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
danoutputFieldMappings
definisi pengindeks Anda danmappings
di pemilih proyeksi indeks Anda. Anda kemudian hanya akan memberikan hal yang samatargetIndexName
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 terpisahparameters
di samping definisi Andaselectors
dengan kunci yang diatur keskipIndexingParentDocuments
, seperti yangprojectionMode
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk