使用 Windows 隨附的篩選處理常式
Microsoft 提供數個具有 Windows 搜尋的標準篩選。 用戶端會呼叫這些篩選處理常式 (,這是 IFilter 介面的實作) ,以從檔中擷取文字和屬性。
本主題的組織方式如下:
Windows 搜尋實作附注
在 Windows 7 和更新版本中,明確封鎖以 Managed 程式碼撰寫的篩選。 篩選必須以原生程式碼撰寫,因為多個增益集執行的進程可能會發生 CLR 版本控制問題。
Windows 7 和 10 實作
在 Windows 7 和更新版本中,註冊篩選處理常式、屬性處理常式或新的延伸模組時,會發生新的行為。 安裝新的屬性處理常式和/或篩選處理常式時,會自動重新編制具有對應副檔名的檔案。
在 Windows 7 和更新版本中,建議您將篩選處理常式與其對應的屬性處理常式一起安裝,並在屬性處理常式之前註冊篩選處理常式。 屬性處理常式的註冊會起始先前索引檔案的立即重新編制索引,而不需要重新開機,並利用任何先前註冊的篩選處理常式來編制內容索引。
如果只安裝篩選處理常式而不安裝對應的屬性處理常式,則在重新開機索引服務或重新開機系統之後,就會自動重新編制索引。
如需 Windows 7 特有的屬性描述旗標,請參閱下列參考主題: GETPROPERTYSTOREFLAGS、 PROPDESC_COLUMNINDEX_TYPE 和 PROPDESC_SEARCHINFO_FLAGS。
Windows Vista 實作
在 Windows Vista 和更早版本中,除非獨立軟體廠商 (ISV) 明確呼叫相符 URL 的重建或重新編制索引,否則安裝 IFilter 或屬性處理常式不會起始現有專案的重新編制索引。
繼承應用程式之間有兩個主要差異,例如索引服務,以及 Windows 搜尋等較新的應用程式,您應該在實作篩選時注意:
- 使用 IPersistStream 介面。
- 使用屬性處理常式。
首先,Windows Vista 和 Windows Search 3.0 和更新版本會要求您基於下列原因使用 IPersistStream :
- 為了確保效能和未來的相容性。
- 協助增加安全性。 使用 IPersistStream 實作的篩選更安全,因為篩選執行的內容不需要開啟磁片上或透過網路開啟檔案的許可權。
雖然 Windows 搜尋只會使用 IPersistStream,但您也可以在篩選中包含 IPersistFile 介面 和/或 IPersistStorage 介面實作 ,以取得回溯相容性。
第二個主要差異是 Windows Vista 和 Windows Search 3.0 和更新版本有新的 屬性系統 ,它會使用屬性處理常式來列舉專案的屬性。
不過,有時候您需要實作可同時處理內容和屬性的篩選,以便:
- 支援舊版 MSSearch 實作。
- 周遊連結。
- 保留語言資訊。
- 以遞迴方式篩選內嵌專案。
在這些情況下,您需要完整的篩選實作,包括 IFilter::GetValue 方法來存取屬性值。
舊版實作
如先前所述,Windows Vista 和 Windows 搜尋包含新的屬性系統,其封裝專案的屬性與專案的內容不同。 舊版 Microsoft Windows 桌面搜尋 (WDS) 2.x 中不存在這個屬性系統。 如果您的篩選必須支援上述的其他應用程式,可能需要同時處理內容和屬性。
如需開發相容篩選的詳細資訊,請參閱下列主題: 繼承應用程式的 IFilter () ,以及 針對繼承應用程式開發篩選增益集 () 。
Windows 搜尋篩選器
Microsoft 提供數個具有 Windows 搜尋的標準篩選。 下表摘要說明 IFilter DLL 內容。 按一下篩選處理常式的名稱會帶您前往該 IFilter 實作的描述。
篩選處理常式 | 篩選的檔案 | IFilter DLL |
---|---|---|
MIME 篩選處理常式 | 多重用途網際網路郵件延伸模組 (MIME) | mimefilt.dll |
HTML 篩選處理常式 | HTML 3.0 或更早版本 | nlhtml.dll |
檔篩選處理常式 | Microsoft Word、Excel、PowerPoint | offfilt.dll |
純文字篩選處理常式 | 純文字檔 - 預設 IFilter | query.dll |
二進位或 Null 篩選處理常式 | 二進位檔案 - Null IFilter | query.dll |
MIME 篩選處理常式
MIME 篩選處理常式 (mimefilt.dll) 會從副檔名為 .eml、.mht 和 .mhtml 的檔案擷取文字和屬性資訊。
HTML 篩選處理常式
HTML 篩選處理常式 (nlhtml.dll) 從類別 「htmlfiles」 擷取文字和屬性資訊,以便 Windows 搜尋服務編制索引。 For a description of the association between IFilter and file type, see "Finding the IFilter DLL for a File" in Registering Filter Handlers.
您可以使用 META
HTML 檔案的標記功能,將特殊處理要求傳達給 HTML IFilter。
META
標記會在標記內 HEAD ... /HEAD
HTML 檔案的開頭附近發生,如下列範例所示。
<head>
<META NAME="DESCRIPTION"
CONTENT="This text appears on the results page as the document's summary.">
</head>
某些 HTML META
標籤會自動對應至已知的屬性集和屬性識別碼 (屬性識別碼 (PID) ) 值,讓這些屬性的查詢會搜尋對應的內容。 下表列出一些範例。 如需可用於檔案格式的系統屬性清單,請參閱 自訂檔案格式的系統定義屬性。
屬性範例 | 對應至 |
---|---|
meta name=「author」 content=「ruth」 | 摘要資訊屬性集中的 author 屬性。 |
meta name=「subject」 content=「word processing」 | 摘要資訊屬性集中的 subject 屬性。 |
meta name=「keywords」 content=「fonts, serif」 | Summary Information 屬性集中的關鍵字屬性。 |
meta name=「ms.category」 content=「fiction」 | 檔摘要資訊屬性集中的類別屬性。 |
下表列出 HTML IFilter 的某些功能。
Task | 動作 | 範例 | |
---|---|---|---|
從檔案建立特殊抽象概念 |
META NAME="DESCRIPTION"... 使用 標籤指示IFilter使用關鍵字後面的 CONTENT 字串做為檔抽象。
注意: |
|
|
防止篩選個別檔案 |
meta name 將標籤新增至檔案。 |
|
|
設定檔案的語言程式碼 (,以確保系統選擇正確的語言斷詞工具和非搜尋文字檔案) | 將下列 meta name 標籤新增至檔案,其中內容欄位會以字元指定適當的語言代碼 (,或使用地區設定值) 。 |
|
檔篩選處理常式
檔篩選處理常式 (offilt.dll) 篩選 Microsoft Office 中某些檔副檔名的檔案。 這些包含副檔名為 .doc、.mdb、.ppt 和 .xlt 的檔案,例如。
純文字篩選處理常式
針對純文字檔案,Windows 搜尋會使用文字篩選處理常式,它會篩選系統屬性 (,例如檔案名) 和檔案的內容。 當檔案類型在登錄中沒有 IFilter 關聯時,Windows 搜尋只會為檔案的 Shell 屬性編制索引。 不過,使用者可以使用 [索引選項] 控制台中的 [進階選項] 來索引屬性或索引屬性和檔案內容。
如果使用者針對沒有相關聯 IFilter的檔案類型選擇此選項,則會使用文字篩選處理常式來擷取檔案的內容。 文字篩選處理常式不會「瞭解」任何檔案格式;篩選檔案的內容時,會將檔案視為字元序列。 它會檢查檔案開頭的 Unicode 位元組順序標記。
二進位或 Null 篩選處理常式
遇到已註冊的二進位檔案時,會使用 Null 篩選處理常式。 Null 篩選處理常式只會擷取系統屬性。 不會篩選二進位檔案的內容。 系統屬性的範例包括 FileName、 LastWriteTime、 FileSize和 Attributes。
其他資源
- GitHub上提供的IFilterSample程式碼範例示範如何建立IFilter基類來實作 IFilter 介面。
- 如需編制索引程式的概觀,請參閱 編制索引進程。
- 如需檔案類型的概觀,請參閱 檔案類型。
- 若要查詢檔案類型的檔案關聯屬性,請參閱 PerceivedTypes、SystemFileAssociations 和應用程式註冊。