Memberi tahu Indeks Perubahan (Windows Search)

Dengan menggunakan komponen API pemberitahuan dapat memberi tahu pengindeks bahwa item telah diubah, dipindahkan, atau dihapus, dan dapat menambahkan cakupan pencarian ke antrean URL pengindeks Windows Search yang memerlukan pengindeksan.

Komponen dapat memberi tahu pengindeks Windows Search bahwa data di penyimpanannya telah berubah. Biasanya, Anda dapat mengandalkan perayapan terjadwal pengindeks. Namun, memberikan pemberitahuan kepada pengindeks dapat meningkatkan performa dengan memastikan pengindeks tidak merayapi seluruh penyimpanan pada indeks bertambah bertahap. Misalnya, ini mungkin direkomendasikan jika Anda mengharapkan penyimpanan data Anda sangat besar dan/atau sangat sibuk, seperti penyimpanan data email misalnya.

Menerapkan Pemberitahuan yang dikelola pengindeks

Pemberitahuan yang dikelola pengindeks memungkinkan Anda mengontrol akses ke penyimpanan data sambil membebaskan Anda mempertahankan antrean pemberitahuan di seluruh proses pengindeksan. Penyedia pemberitahuan Anda harus memantau perubahan pada penyimpanan data dan membuat antrean pemberitahuan. Secara berkala, penyedia Anda mengirimkan batch pemberitahuan perubahan ke pengindeks. Saat pengindeks menerima pemberitahuan Anda, pengindeks mengembalikan pengakuan dan Anda dapat menghapus item dari antrean Anda. Jika setelah jangka waktu tertentu Anda tidak menerima pengakuan, Anda dapat mengirim ulang pemberitahuan. Jika terjadi kegagalan, pengindeks membangun kembali antrean internal item untuk dirayapi atau melakukan perayapan bertahap penyimpanan.

Untuk menerapkan pemberitahuan yang dikelola pengindeks, Anda perlu menerapkan hal berikut:

Antrean Pemberitahuan

Anda perlu memantau dan mengantre setiap perubahan di penyimpanan data Anda untuk dikirim ke pengindeks sebagai pemberitahuan. Berapa banyak pemberitahuan yang Anda antre dan seberapa sering Anda mengirimkannya ke pengindeks tergantung pada keadaan Anda. Mungkin Anda mengirim batch pemberitahuan untuk setiap n jumlah perubahan atau setelah interval waktu t , atau kombinasi keduanya.

Pengindeks mengharapkan pemberitahuan datang dalam array struktur SEARCH_ITEM_PERSISTENT_CHANGE , sehingga Anda dapat memilih untuk mengimplementasikan antrean Anda dengan cara yang sama.

ISearchPersistentItemsChangedSink

Untuk mengakses antarmuka ini, Anda terlebih dahulu membuat instans objek ISearchManager untuk mendapatkan akses ke objek ISearchCatalogManager . Dari objek ISearchCatalogManager , Anda membuat instans objek ISearchPersistentItemsChangedSink dan memberi tahu pengindeks tentang perubahan data dengan panggilan ke metode OnItemsChanged .

Dalam panggilan ke metode ini, Anda menyertakan jumlah perubahan yang dilaporkan dan array struktur SEARCH_ITEM_PERSISTENT_CHANGE . Anda mendapatkan kembali array kode penyelesaian SDM yang menunjukkan apakah setiap URL diterima untuk pengindeksan. Ini adalah pengakuan Anda dari pengindeks.

Menerapkan Pemberitahuan yang dikelola Penyedia

Pemberitahuan yang dikelola penyedia memungkinkan Anda mengontrol akses ke penyimpanan data Anda dan memantau kemajuan pengindeks saat memperbarui katalog Windows Search. Penyedia Anda harus memantau perubahan pada penyimpanan data dan membuat antrean pemberitahuan. Secara berkala, penyedia Anda mengirimkan batch pemberitahuan perubahan ke pengindeks. Saat pengindeks menerima pemberitahuan Anda, pengindeks mengembalikan pengakuan. Jika setelah jangka waktu tertentu Anda tidak menerima pengakuan, Anda dapat mengirim ulang pemberitahuan. Saat pengindeks merayapi penyimpanan data dan memperbarui katalog Windows Search, pengindeks memberi tahu penyedia Anda tentang setiap pembaruan katalog dan Anda dapat menghapus item dari antrean Anda. Penyedia Anda mempertahankan antrean pemberitahuannya selama proses ini sehingga jika terjadi kegagalan, Anda dapat mengirim ulang pemberitahuan ke pengindeks.

Untuk menerapkan pemberitahuan yang dikelola penyedia, Anda perlu menerapkan hal berikut:

Antrean Pemberitahuan

Anda perlu memantau dan mengantre setiap perubahan di penyimpanan data Anda untuk dikirim ke pengindeks sebagai pemberitahuan. Berapa banyak pemberitahuan yang Anda antre dan seberapa sering Anda mengirimkannya ke pengindeks tergantung pada keadaan Anda. Mungkin Anda mengirim batch pemberitahuan untuk setiap n jumlah perubahan atau setelah interval waktu t , atau kombinasi keduanya.

Pengindeks mengharapkan pemberitahuan datang dalam array struktur SEARCH_ITEM_CHANGE , sehingga Anda dapat memilih untuk menyimpan informasi perubahan dengan cara yang sama. Namun, Anda juga harus dapat mencocokkan pemberitahuan yang Anda kirim dengan pengakuan dan pembaruan yang dikembalikan oleh pengindeks. Anda mungkin juga ingin dapat mendeteksi berapa lama waktu yang diperlukan untuk mendapatkan pengakuan, sehingga Anda dapat memutuskan apakah/kapan mengirim ulang pemberitahuan.

ISearchItemsChangedSink

Untuk mengakses antarmuka ini, Anda terlebih dahulu membuat instans objek ISearchManager untuk mendapatkan akses ke objek ISearchCatalogManager . Dari objek ISearchCatalogManager , Anda membuat instans objek ISearchItemsChangedSink dan memberi tahu pengindeks perubahan data dengan panggilan ke metode OnItemsChanged .

Dalam panggilan ke metode ini, Anda menyertakan jumlah perubahan yang dilaporkan dan array struktur SEARCH_ITEM_CHANGE . Anda mendapatkan kembali array DocId yang ditetapkan pengindeks yang mewakili setiap perubahan serta array kode penyelesaian SDM yang menunjukkan apakah setiap URL diterima untuk pengindeksan. Ini adalah pengakuan Anda dari pengindeks bahwa pengindeks telah menerima pemberitahuan Anda dan bersiap untuk mengindeks item.

Sejak saat itu, pengindeks mengirimkan pembaruan menggunakan antarmuka ISearchNotifyInlineSite .

ISearchNotifyInlineSite

Untuk mendapatkan pembaruan tentang status item dan katalog Anda, Anda harus mendaftarkan antarmuka ISearchNotifyInlineSite dengan pengindeks sehingga dapat mengirimi Anda panggilan balik. Setiap pembaruan yang dikirim menggunakan ISearchNotifyInlineSite::OnItemIndexedStatusChange mengidentifikasi item berdasarkan DocId, status setiap item (SEARCH_ITEM_INDEXING_STATUS) dan fase pengindeksan (SEARCH_INDEXING_PHASE) item berada.

Anda tidak hanya menerima pembaruan tentang status setiap item, seperti yang dijelaskan sebelumnya, Anda juga mendapatkan informasi penting tentang status katalog itu sendiri. Windows layanan Pencarian dapat diinterupsi atau dimulai ulang oleh pengguna akhir, aplikasi pihak ketiga, atau beberapa kegagalan lainnya. Ketika ini terjadi, Anda memerlukan cara untuk menentukan pemberitahuan apa yang akan dipublikasi ulang ke pengindeks.

Metode ISearchNotifyInlineSite::OnCatalogStatusChange, yang dipanggil oleh layanan Pencarian Windows, memberi tahu klien tentang status katalog menggunakan parameter yang dijelaskan dalam tabel berikut.

Parameter Deskripsi
guidCatalogResetSignature GUID yang mewakili reset katalog. Jika GUID ini berubah, semua pemberitahuan harus ditolak.
guidCheckPointSignature GUID yang mewakili titik pemeriksaan terakhir yang dipulihkan. Jika GUID ini berubah, semua pemberitahuan yang terakumulasi sejak titik pemeriksaan terakhir yang disimpan harus ditolak.
dwLastCheckPointNumber Angka yang menunjukkan titik pemeriksaan terakhir disimpan.

 

 

Ketika titik pemeriksaan katalog terjadi, layanan pencarian memperbarui dwLastCheckPointNumber, dan semua pemberitahuan yang dikirim sebelum titik pemeriksaan tersebut aman dan dapat dipulihkan jika terjadi kegagalan layanan. Penyedia pemberitahuan hanya perlu melacak pemberitahuan yang dikirim antara titik pemeriksaan dan pembuangan jika terjadi pemulihan atau reset katalog.

Jika pemulihan katalog terjadi, layanan pencarian mengembalikan katalog ke titik pemeriksaan terakhir yang disimpan dan memperbarui guidCheckPointSignature. Dalam situasi ini, penyedia pemberitahuan harus menghapus ulang semua pemberitahuan yang terakumulasi sejak titik pemeriksaan tersimpan terbaru seperti yang diidentifikasi oleh dwLastCheckPointNumber.

Jika reset katalog harus terjadi, layanan pencarian mengatur ulang seluruh katalog dan memperbarui guidCatalogResetSignature. Penyedia pemberitahuan harus mengembalikan seluruh cakupan perayapannya lagi.

Sumber Daya Tambahan

Konseptual

Mengembangkan Handler Protokol

Memahami Handler Protokol

Menambahkan Ikon dan Menu Konteks

Sampel Kode: Ekstensi Shell untuk Penangan Protokol

Menginstal dan Mendaftarkan Penangan Protokol

Membuat Konektor Pencarian untuk Handler Protokol

Penangan Protokol Debugging