A változások indexének értesítése (Windows Search)

Az értesítési API-összetevők használatával értesítheti az indexelőt arról, hogy egy elemet módosítottak, áthelyeztek vagy töröltek, és keresési hatóköröket adhat hozzá a Windows Search indexelőjének indexelést igénylő URL-címeinek üzenetsorához.

Az összetevők értesíthetik a Windows Search-indexelőt, hogy az adattárban lévő adatok megváltoztak. Általában az indexelő ütemezett bejárásaira támaszkodhat. Ha azonban értesítéseket küld az indexelőnek, azzal javíthatja a teljesítményt, ha biztosítja, hogy az indexelő ne járja be a teljes tárolót növekményes indexeken. Ez például akkor ajánlott, ha azt szeretné, hogy az adattár rendkívül nagy és/vagy kivételesen foglalt legyen, például egy e-mail-adattárban.

Indexelő által felügyelt értesítések implementálása

Az indexelő által felügyelt értesítések lehetővé teszik az adattárhoz való hozzáférés szabályozását, miközben megszabadítják Önt attól, hogy az értesítési üzenetsor fenntartásával kelljen foglalkoznia a teljes indexelési folyamat során. Az értesítési szolgáltatónak figyelnie kell az adattár módosításait, és létre kell hoznia egy értesítési üzenetsort. A szolgáltató rendszeres időközönként egy köteg változásértesítést küld az indexelőnek. Amikor az indexelő megkapja az értesítéseket, visszaigazolást ad vissza, és eltávolíthatja az elemeket az üzenetsorból. Ha egy idő után nem kap nyugtát, újra elküldheti az értesítéseket. Hiba esetén az indexelő újraépíti az elemek belső számláját a bejáráshoz, vagy lépésenkénti bejárást végez a tárhelyen.

Az indexelő által felügyelt értesítések implementálásához a következőket kell implementálnia:

  • Az adattár változásainak monitorozására szolgáló mechanizmus.
  • Adatstruktúra, amely információk (több SEARCH_ITEM_PERSISTENT_CHANGE struktúra) sorba állítására szolgál a változásokról.
  • ISearchPersistentItemsChangedSink felületet, hogy értesítéseket küldjön az indexelőnek, és értesítést kapjon az indexelőtől.

Értesítési üzenetsor

Az indexelőnek értesítésként való elküldéséhez monitoroznia és várólistára kell állítania az adattár minden változását. A körülményektől függ, hogy hány értesítés áll várólistára, és milyen gyakran küldi el őket az indexelőnek. Esetleg küld egy csomag értesítést minden n számú módosítás után vagy időintervallum után, vagy a kettő kombinációjaként.

Az indexelő elvárja, hogy az értesítések SEARCH_ITEM_PERSISTENT_CHANGE struktúrák tömbjében érkezzenek, így dönthet úgy, hogy hasonlóan implementálja az üzenetsorát.

ISearchPersistentItemsChangedSink

A felület eléréséhez először egy ISearchManager objektumot kell létrehoznia, hogy hozzáférjen egy ISearchCatalogManager objektumhoz. Ebből a ISearchCatalogManager objektumból létrehoz egy ISearchPersistentItemsChangedSink objektumot, és az OnItemsChanged metódus hívásával értesíti az indexelőt az adatváltozásokról.

A metódus meghívásában szerepel a jelentett módosítások száma és a SEARCH_ITEM_PERSISTENT_CHANGE struktúrák tömbje. Egy HR-befejezési kódtömböt kap vissza, amely jelzi, hogy az egyes URL-címeket elfogadták-e az indexeléshez. Ez az indexelőtől kapott nyugtázás.

Szolgáltató által felügyelt értesítések implementálása

A szolgáltató által felügyelt értesítések lehetővé teszik az adattárhoz való hozzáférés szabályozását, valamint az indexelő előrehaladásának figyelését a Windows Search katalógus frissítésekor. A szolgáltatónak figyelnie kell az adattár módosításait, és létre kell hoznia egy értesítési üzenetsort. A szolgáltató rendszeres időközönként egy köteg változásértesítést küld az indexelőnek. Amikor az indexelő megkapja az értesítéseket, visszaigazolást ad vissza. Ha egy idő után nem kap nyugtát, újra elküldheti az értesítéseket. Ahogy az indexelő bejárja az adattárat, és frissíti a Windows Search katalógust, értesíti a szolgáltatót az egyes katalógusfrissítésekről, és eltávolíthatja az elemeket az üzenetsorból. A szolgáltató a folyamat során fenntartja az értesítési üzenetsort, így hiba esetén újraküldheti az értesítéseket az indexelőnek.

A szolgáltató által felügyelt értesítések implementálásához a következőket kell implementálnia:

  • Az adattár változásainak monitorozására szolgáló mechanizmus.
  • Adatstruktúra, amely a változásokra vonatkozó információkat (több SEARCH_ITEM_CHANGE struktúrát) szeretne várólistára állítani.
  • ISearchItemsChangedSink felületet, hogy értesítéseket küldjön az indexelőnek, és értesítést kapjon az indexelőtől.
  • ISearchNotifyInlineSite felületet az indexelés állapotával kapcsolatos frissítések fogadásához.

Értesítési üzenetsor

Az indexelőnek értesítésként való elküldéséhez monitoroznia és várólistára kell állítania az adattár minden változását. A körülményektől függ, hogy hány értesítés áll várólistára, és milyen gyakran küldi el őket az indexelőnek. Esetleg küld egy csomag értesítést minden n számú módosítás után vagy időintervallum után, vagy a kettő kombinációjaként.

Az indexelő elvárja, hogy az értesítések SEARCH_ITEM_CHANGE struktúrák tömbjéhez érkezzenek, ezért dönthet úgy, hogy hasonlóan tárolja a módosítási információkat. Ugyanakkor az indexelő által visszaadott nyugtázásokkal és frissítésekkel is meg kell egyeznie az elküldött értesítéseknek. Azt is érdemes tudnia, hogy mennyi ideig tart a nyugtázás, így eldöntheti, hogy mikor/mikor küldi el újra az értesítéseket.

ISearchItemsChangedSink

A felület eléréséhez először egy ISearchManager objektumot kell létrehoznia, hogy hozzáférjen egy ISearchCatalogManager objektumhoz. Ebből a ISearchCatalogManager objektumból létrehoz egy ISearchItemsChangedSink objektumot, és az OnItemsChanged metódus hívásával értesíti az indexelőt az adatváltozásokról.

A metódus meghívásában szerepel a jelentett módosítások száma és a SEARCH_ITEM_CHANGE struktúrák tömbje. Egy indexelő által hozzárendelt DocId-tömböt kap vissza, amelyek az egyes módosításokat jelölik, valamint egy HR-befejezési kódokat tartalmazó tömböt, amely jelzi, hogy az egyes URL-címeket elfogadták-e az indexeléshez. Ez az indexelő nyugtázza, hogy megkapta az értesítéseket, és az elemek indexelésére készül.

Ettől a ponttól kezdve az indexelő frissítéseket küld az ISearchNotifyInlineSite felülettel.

ISearchNotifyInlineSite

Ahhoz, hogy mind az elemek, mind a katalógus állapotával kapcsolatos frissítéseket kapjon, regisztrálnia kell a ISearchNotifyInlineSite felületet az indexelővel, hogy visszahívásokat küldjön Önnek. Minden frissítés, amelyet a ISearchNotifyInlineSite::OnItemIndexedStatusChange segítségével küldenek, azonosítja az elemeket DocId alapján, az egyes elemek állapotát (SEARCH_ITEM_INDEXING_STATUS) és az indexelési fázist (SEARCH_INDEXING_PHASE), amelyben az elemek vannak.

Nem csak az egyes elemek állapotáról kap frissítéseket, hanem fontos információkat is kap magáról a katalógusról. A Windows Search szolgáltatást a végfelhasználó, egy harmadik féltől származó alkalmazás vagy valamilyen más hiba megszakíthatja vagy újraindíthatja. Ha ez történik, meg kell határoznia, hogy milyen értesítéseket kell visszacsatolnia az indexelőnek.

A ISearchNotifyInlineSite::OnCatalogStatusChange metódus, amelyet a Windows Search szolgáltatás hív meg, az alábbi táblázatban ismertetett paraméterekkel tájékoztatja az ügyfeleket a katalógus állapotáról.

Paraméter Leírás
guidKatalógusVisszaállításAláírás A katalógus alaphelyzetbe állítását jelképező GUID. Ha ez a GUID megváltozik, minden értesítést újra kell küldeni.
guidEllenőrzőPontAláírás Az utolsó visszaállított ellenőrzőpontot jelölő GUID azonosító. Ha ez a GUID megváltozik, az utolsó mentett ellenőrzőpont óta felhalmozott összes értesítést újra kell küldeni.
dwLastCheckPointNumber Az utolsó mentett ellenőrzőpontot jelző szám.

 

 

Katalógus-ellenőrzőpont bekövetkezésekor a keresési szolgáltatás frissíti a dwLastCheckPointNumberértékét, és minden értesítés, amelyet azt megelőzően küldtek, biztonságos és helyreállítható egy esetleges szolgáltatáshiba esetén. A szolgáltatóknak csak az ellenőrzőpontok között küldött értesítéseket kell nyomon követniük, és katalógus-helyreállítás vagy alaphelyzetbe állítás esetén újra elküldeniük.

Katalógus-visszaállítás esetén a keresési szolgáltatás visszaállítja a katalógust az utolsó mentett ellenőrzőpontra, és frissíti a guidCheckPointSignature. Ebben az esetben az értesítésszolgáltatóknak a legutóbbi mentett ellenőrzőpont óta felhalmozott összes értesítést újra el kell küldeniük a dwLastCheckPointNumber.

Ha a katalógus alaphelyzetbe állítása történik, a keresési szolgáltatás alaphelyzetbe állítja a teljes katalógust, és frissíti a guidCatalogResetSignature. Az értesítési szolgáltatónak újra meg kell küldenie a teljes bejárási területét.

További erőforrások

fogalmi

Protokollkezelők fejlesztése

Protokollkezelők ismertetése

Ikonok és helyi menük hozzáadása

kódminta: A Protokollkezelők rendszerhéjbővítményei

Protokollkezelők telepítése és regisztrálása

Keresésiszolgáltatás-összekötő létrehozása a protokollkezelő számára

hibakeresési protokollkezelők