共用方式為


使用 ISearchQueryHelper 查詢索引

您可以使用 ISearchQueryHelper 介面來查詢索引。 這個介面被實作為一個協助類別,用於 ISearchCatalogManager (和 ISearchCatalogManager2),並通過呼叫 ISearchCatalogManager::GetQueryHelper來取得。 此介面可讓您:

  • 取得連線到 Windows Search 資料庫的 OLE DB 連接字串。
  • 將進階查詢語法 (AQS) 使用者查詢轉換為 Windows 搜尋結構化查詢語言 (SQL)。
  • 指定可在 SQL 中表示但不能以 AQS 表示的查詢限制。

本主題的組織方式如下:

開始使用 ISearchQueryHelper

您必須先了解幾個重要的介面和方法,才能透過 ISearchQueryHelper 介面以程式方式查詢 Windows 搜尋。 概括而言,您必須遵循下列步驟:

  1. 具現化 ISearchManager 實例。

    // Create ISearchManager instance
    ISearchManager* pSearchManager;
    
    // Use library SearchSDK.lib for CLSID_CSearchManager.
    hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));      
    
  2. 使用 ISearchManager::GetCatalog取得 ISearchCatalogManager 實例。 Windows 搜尋系統目錄的名稱 SYSTEMINDEX

    // Create ISearchCatalogManager instance 
    ISearchCatalogManager* pSearchCatalogManager;
    
    // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager
    hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);
    
    
  3. 使用 ISearchCatalogManager::GetQueryHelper取得 ISearchQueryHelper 實例。

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. 當您有 ISearchQueryHelper實體之後,您就可以取得用來連線到 Windows 搜尋服務索引 OLE DB 連接器的連接字串。

    // Call get_ConnectionString to get the OLE DB connection string
    LPWSTR pszConnectionString=NULL;
    
    hr = pQueryHelper->get_ConnectionString(&pszConnectionString);
    // NOTE: YOU MUST call CoTaskMemFree() on the string
    
    

使用 GenerateSqlFromUserQuery 方法

ISearchQueryHelper::GenerateSQLFromUserQuery 方法會將使用者輸入轉換成 SQL 查詢字元串,然後提交至 Windows 搜尋的 OLE DB 提供者。 此方法會將使用者輸入的 進階查詢語法 (AQS) 或自然查詢語法 (NQS) 查詢轉譯為 SQL,並可讓您視需要新增其他 SQL 片段。

SQL 查詢字串會以下列形式傳回:

SELECT <QuerySelectColumns> 
FROM <CatalogName that created query helper>
WHERE <Result of interpreting the user query passed into this function according to QuerySyntax>
      [ AND|OR <QueryWhereRestrictions> ]
    

以下是從呼叫 GenerateSQLFromUserQuery("comput")傳回的 SQL 字串範例:

SELECT "System.ItemUrl" 
FROM "SystemIndex" 
WHERE ((CONTAINS(*,'"comput*"',1033) RANK BY COERCION(Absolute, 1)) OR 
       (FREETEXT(("System.ItemNameDisplay":0.9, *:0.1), 'comput', 1033) AND CONTAINS(*,'"comput"',1033)))
ORDER BY "System.ItemUrl"

注意

方法會產生 FREETEXT 和 CONTAINS 述詞,因為 CONTAINS 本身不會產生有意義的排名。

 

使用地區設定識別碼

方法 描述
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::put_QueryContentLocale
取得/放置查詢的語言代碼識別碼 (LCID)。 這有助於獲取正確的斷詞工具和詞幹提取器,以便將查詢字詞與目錄/反向索引進行比較。 預設值為目前的輸入地區設定。
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::put_QueryKeywordLocale
取得/放置 LCID,讓語言在剖析進階查詢語法 (AQS) 關鍵詞時使用。 預設值為預設用戶地區設定。

 

內容地區設定關鍵詞地區設定 是地區設定識別元(LCID),可藉由識別查詢字詞的語言和 AQS 關鍵詞的語言,協助搜尋引擎使用正確的斷詞工具。 這些不一定是相同的 LCID,因為 Windows 搜尋提供許多國際版本,也包含多語系使用者介面 (MUI) 套件,以取得更多語言。 內容地區設定會識別使用者輸入搜尋查詢的語言 LCID,而關鍵詞地區設定可識別搜尋引擎在剖析進階查詢語法 (AQS) 關鍵詞時所使用的 LCID。

例如,如果您有沒有 MUI 套件的 English-US 版本,則內容地區設定和關鍵詞地區設定都是 1033。 如果您有未安裝 MUI 套件的德文版本,則內容區域設定和關鍵詞區域設定都是 1031 (gr-gr)。 不過,如果您有英文版的羅馬尼亞 MUI 套件,則內容地區設定為 2072 (ro),關鍵詞地區設定為 1033 (en-us)。

使用屬性和欄位

方法 描述
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::put_QueryContentProperties
取得/設定搜尋的內容屬性(CONTAINS 或 FREETEXT 子句中列出的屬性數據行)。
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::put_QuerySelectColumns
取得/設定 SELECT 語句中要求的數據行(或屬性)。 預設值為 System.ItemUrl 和 WHERE 子句中使用的屬性。

 

項目會以一個資料列呈現在屬性存放區中。 每個數據列都包含一些數據行,這些數據行代表該專案的屬性。 並非所有項目都會有指定屬性的值。 例如,音訊檔案通常不包含 System.Property.FromName 屬性的值,但可能包含 System.Music.Artist 的相關信息。

透過這些方法,您可以使用逗號分隔、以 Null 結尾的 Unicode 字串來存取或修改屬性存放區:“System.Document.Author, System.Document.Title” 的一或多個數據行名稱。

使用查詢詞語擴展技術

方法 描述
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::put_QueryTermExpansion
取得或設定搜尋字詞展開標誌。

 

這個方法可讓您使用通配符擴充某些查詢字詞,類似於正則表達式擴充。 前綴展開會搜尋具有相同前綴的單詞(fun/funnel)。 如果未設定,預設值為 SEARCH_TERM_PREFIX_ALL。 SEARCH_TERM_EXPANSION 列舉的支援值如下所示:

  • SEARCH_TERM_PREFIX_ALL - 所有搜尋字詞都會被擴展
  • SEARCH_TERM_NO_EXPANSION - 沒有擴展搜尋字詞

與其他 ISearchQueryHelper 方法一起合作

ISearchQueryHelper 介面中的許多方法都用來設定查詢自變數或定義傳回的屬性。

方法 描述
ISearchQueryHelper::get_ConnectionString
傳回 OLE DB 連接字串。 這是取得正確格式化和正確連接字串的慣用方法。
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::put_QueryMaxResults
取得/設定查詢傳回的結果數目上限(也就是 SELECT TOP n)。 默認值為 -1,表示不會產生任何結果子句上限。
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::put_QuerySorting
取得/設定查詢結果集的排序順序(ORDER BY)。 如果沒有 ORDER BY 子句存在,結果會以不具決定性的順序傳回。
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::put_QuerySyntax
取得/設定查詢的語法:進階查詢語法或自然查詢語法。
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::put_QueryWhereRestrictions
取得/設定透過 WHERE 子句附加的限制條件。

 

以程式設計方式查詢索引

使用 SQL 和 AQS 方法來查詢索引

使用 search-ms 通訊協定 查詢索引

使用 Windows 搜尋 SQL 語法查詢索引

以程序設計方式使用進階查詢語法