使用 ISearchQueryHelper 查詢索引
您可以使用 ISearchQueryHelper 介面來查詢索引。 這個介面被實作為一個協助類別,用於 ISearchCatalogManager (和 ISearchCatalogManager2),並通過呼叫 ISearchCatalogManager::GetQueryHelper來取得。 此介面可讓您:
- 取得連線到 Windows Search 資料庫的 OLE DB 連接字串。
- 將進階查詢語法 (AQS) 使用者查詢轉換為 Windows 搜尋結構化查詢語言 (SQL)。
- 指定可在 SQL 中表示但不能以 AQS 表示的查詢限制。
本主題的組織方式如下:
- ISearchQueryHelper 入門
- 使用 GenerateSqlFromUserQuery 方法
- 使用地區設定標識碼
- 使用屬性和數據行
- 處理查詢詞語擴展
- 使用其他 ISearchQueryHelper 方法
- 相關主題
開始使用 ISearchQueryHelper
您必須先了解幾個重要的介面和方法,才能透過 ISearchQueryHelper 介面以程式方式查詢 Windows 搜尋。 概括而言,您必須遵循下列步驟:
具現化 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));
使用 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);
使用 ISearchCatalogManager::GetQueryHelper取得 ISearchQueryHelper 實例。
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
當您有 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 子句附加的限制條件。 |
相關主題
-
使用 search-ms 通訊協定 查詢索引