Mengindeks blob dan file untuk menghasilkan beberapa dokumen pencarian

Nota

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Berlaku untuk: Pengindeks blob, Pengindeks file (pratinjau)

Secara default, pengindeks memperlakukan konten blob atau file sebagai satu dokumen pencarian. Jika Anda menginginkan representasi yang lebih terperinci dalam indeks pencarian, Anda dapat mengatur nilai parsingMode untuk membuat beberapa dokumen pencarian dari satu blob atau file. Nilai parsingMode yang menghasilkan banyak dokumen pencarian termasuk delimitedText (untuk CSV), jsonArray atau jsonLines (untuk JSON), atau markdown dengan sub-mode oneToMany untuk markdown.

Saat Anda menggunakan salah satu mode penguraian ini, dokumen pencarian baru yang muncul harus memiliki kunci dokumen yang unik, dan masalah muncul dalam menentukan dari mana nilai tersebut berasal. Blob induk memiliki setidaknya satu nilai unik dalam bentuk metadata_storage_path property, tetapi jika berkontribusi nilai tersebut ke lebih dari satu dokumen pencarian, kunci tidak lagi unik dalam indeks.

Untuk mengatasi masalah ini, pengindeks blob menghasilkan AzureSearch_DocumentKey yang secara unik mengidentifikasi setiap dokumen pencarian anak yang dibuat dari induk blob tunggal. Artikel ini menjelaskan cara kerja fitur ini.

Kunci dokumen satu ke banyak

Kunci dokumen secara unik mengidentifikasi setiap dokumen dalam indeks. Ketika tidak ada mode penguraian yang ditentukan, dan jika tidak ada pemetaan bidang eksplisit dalam definisi pengindeks untuk kunci dokumen pencarian, pengindeks blob secara otomatis memetakan metadata_storage_path property sebagai kunci dokumen. Pemetaan default ini memastikan bahwa setiap blob muncul sebagai dokumen pencarian yang berbeda. Ini juga menghilangkan kebutuhan Anda untuk membuat pemetaan bidang ini secara manual. Biasanya, bidang dengan nama dan jenis yang identik adalah satu-satunya yang dipetakan secara otomatis.

Dalam skenario dokumen pencarian satu-ke-banyak, kunci dokumen implisit berdasarkan metadata_storage_path property tidak dimungkinkan. Sebagai solusinya, Pencarian Azure AI dapat menghasilkan kunci dokumen untuk setiap entitas individu yang diekstrak dari blob. Sistem menghasilkan kunci yang disebut AzureSearch_DocumentKey dan menambahkannya ke setiap dokumen pencarian. Pengindeks melacak "banyak dokumen" yang dibuat dari setiap blob, dan dapat menargetkan pembaruan ke indeks pencarian saat data sumber berubah dari waktu ke waktu.

Secara default, ketika tidak ada pemetaan bidang eksplisit untuk bidang indeks kunci yang ditentukan, AzureSearch_DocumentKey dipetakan ke bidang tersebut base64Encode , menggunakan fungsi pemetaan bidang.

Example

Asumsikan definisi indeks dengan bidang berikut:

  • id
  • temperature
  • pressure
  • timestamp

Dan kontainer blob Anda memiliki blob dengan struktur berikut:

Blob1.json

{ "temperature": 100, "pressure": 100, "timestamp": "2024-02-13T00:00:00Z" }
{ "temperature" : 33, "pressure" : 30, "timestamp": "2024-02-14T00:00:00Z" }

Blob2.json

{ "temperature": 1, "pressure": 1, "timestamp": "2023-01-12T00:00:00Z" }
{ "temperature" : 120, "pressure" : 3, "timestamp": "2022-05-11T00:00:00Z" }

Saat Anda membuat pengindeks dan mengatur parsingMode ke jsonLines - tanpa menentukan pemetaan bidang eksplisit untuk bidang kunci, pemetaan berikut diterapkan secara implisit.

{
    "sourceFieldName" : "AzureSearch_DocumentKey",
    "targetFieldName": "id",
    "mappingFunction": { "name" : "base64Encode" }
}

Penyiapan ini menghasilkan kunci dokumen yang tidak ambigu, mirip dengan ilustrasi berikut (ID yang dikodekan dengan base64 dipersingkat untuk kependekan).

ID suhu tekanan stempel waktu
aHR0 ... YjEuanNvbjsx 100 100 2024-02-13T00:00:00Z
aHR0 ... YjEuanNvbjsy 33 30 2024-02-14T00:00:00Z
aHR0 ... YjIuanNvbjsx 1 1 2023-01-12T00:00:00Z
aHR0 ... YjIuanNvbjsy 120 3 2022-05-11T00:00:00Z

Pemetaan bidang kustom untuk bidang kunci indeks

Dengan asumsi definisi indeks yang sama dengan contoh sebelumnya, misalkan kontainer blob Anda memiliki blob dengan struktur berikut:

Blob1.json

recordid, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z" 
2, 33, 30,"2024-02-14T00:00:00Z" 

Blob2.json

recordid, temperature, pressure, timestamp
1, 1, 1,"20123-01-12T00:00:00Z" 
2, 120, 3,"2022-05-11T00:00:00Z" 

Saat Anda membuat pengindeks dengan delimitedTextparsingMode, mungkin terasa alami untuk menyiapkan fungsi pemetaan bidang ke bidang kunci sebagai berikut:

{
    "sourceFieldName" : "recordid",
    "targetFieldName": "id"
}

Namun, pemetaan ini tidak mengakibatkan empat dokumen muncul dalam indeks karena recordid bidang tidak unik di seluruh blob. Oleh karena itu, kami sarankan Anda untuk menggunakan pemetaan bidang implisit yang diterapkan dari properti AzureSearch_DocumentKey ke bidang indeks kunci untuk mode penguraian "satu-ke-banyak".

Jika Anda ingin menyiapkan pemetaan bidang eksplisit, pastikan bahwa sourceField berbeda untuk setiap entitas individu di semua blob.

Nota

Pendekatan yang digunakan dengan AzureSearch_DocumentKey memastikan keunikan per entitas yang diekstrak dapat berubah dan oleh karena itu Anda tidak boleh mengandalkan nilainya untuk kebutuhan aplikasi Anda.

Tentukan bidang kunci indeks di data Anda

Dengan asumsi definisi indeks yang sama dengan contoh sebelumnya dan parsingMode diatur ke jsonLines tanpa menentukan pemetaan bidang eksplisit sehingga pemetaan terlihat seperti dalam contoh pertama, misalkan kontainer blob Anda memiliki blob dengan struktur berikut:

Blob1.json

id, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z" 
2, 33, 30,"2024-02-14T00:00:00Z"

Blob2.json

id, temperature, pressure, timestamp
1, 1, 1,"2023-01-12T00:00:00Z" 
2, 120, 3,"2022-05-11T00:00:00Z" 

Setiap dokumen berisi id bidang , yang didefinisikan sebagai key bidang dalam indeks. Dalam situasi ini, sistem menghasilkan bidang kunci idfor the document, but it isn't used as the "key." Instead, the value of theAzureSearch_DocumentKeyfield is mapped to theunik.

Mirip dengan contoh sebelumnya, pemetaan ini tidak menghasilkan empat dokumen yang muncul dalam indeks karena id bidang tidak unik di seluruh blob. Ketika situasi ini terjadi, entri JSON apa pun yang mencantumkan id menyebabkan penggabungan dengan dokumen yang ada, bukan mengunggah yang baru. Indeks kemudian mencerminkan status entri terbaru dengan id yang ditentukan.

Keterbatasan

Saat entri dokumen dalam indeks dibuat dari baris dalam file, seperti yang dijelaskan dalam artikel ini, menghapus baris tersebut dari file tidak secara otomatis menghapus entri yang sesuai dari indeks. Untuk menghapus entri dokumen, Anda harus mengirimkan permintaan penghapusan secara manual ke indeks menggunakan operasi penghapusan REST API.

Langkah selanjutnya

Jika Anda belum terbiasa dengan struktur dasar dan alur kerja pengindeksan blob, Anda harus meninjau Pengindeksan Azure Blob Storage dengan Pencarian Azure AI terlebih dahulu. Untuk informasi selengkapnya tentang mode penguraian untuk jenis konten blob yang berbeda, tinjau artikel berikut.