隨 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 搜尋編製索引。 如需
您可以使用 HTML 檔案的 META
標記功能,將特殊處理要求傳達給 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)) 值,以便對這些屬性的查詢搜尋對應的內容。 下表列出一些範例。 如需可用於檔案格式的系統屬性清單,請參閱 System-Defined 自定義檔案格式的屬性。
屬性範例 | 對應至 |
---|---|
meta name=“author” content=“ruth” | 摘要信息屬性集中的 author 屬性。 |
meta name=“subject” content=“word processing” | 摘要資訊屬性集中的主旨屬性。 |
meta name=“keywords” content=“fonts, serif” | 摘要資訊屬性集中的關鍵詞屬性。 |
meta name=“ms.category” content=“fiction” | 檔摘要資訊屬性集中的category屬性。 |
下表列出 HTML IFilter 的某些功能。
任務 | 行動 | 例 | |
---|---|---|---|
從檔案建立特殊抽象概念 | 使用 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 和應用程式註冊。
相關主題
關於 Windows 搜尋 中的篩選處理程式
在 Windows 搜尋服務中建立篩選處理程式的 最佳做法
在 Windows 搜尋 中實作篩選處理程式