使用 ISearchQueryHelper 查詢索引
您可以使用 ISearchQueryHelper 介面來查詢索引。 這個介面會實作為 ISearchCatalogManager (和 ISearchCatalogManager2) 的協助程式類別,並呼叫 ISearchCatalogManager::GetQueryHelper來取得。 此介面可讓您:
- 取得 OLE DB 連接字串以連線到 Windows 搜尋服務資料庫。
- 將進階查詢語法 (AQS) 使用者查詢轉換成 Windows 搜尋服務結構化查詢語言 (SQL) (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 查詢字串會以下列形式傳回:
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 單獨不會產生有意義的排名。
使用地區設定識別碼
方法 | Description |
---|---|
ISearchQueryHelper::get_QueryContentLocale/ ISearchQueryHelper::p ut_QueryContentLocale |
取得/放置語言代碼識別碼 (LCID) 查詢。 這有助於取得正確的斷詞工具和字幹分析器,以比較查詢字詞與目錄/反向索引。 預設值為目前的輸入地區設定。 |
ISearchQueryHelper::get_QueryKeywordLocale/ ISearchQueryHelper::p ut_QueryKeywordLocale |
取得/放置語言的 LCID,當剖析進階查詢語法 (AQS) 關鍵字時使用。 預設值為預設使用者地區設定。 |
內容地區設定和關鍵字地區設定是 (LCID) 的地區設定識別碼,可藉由識別查詢字詞的語言和 AQS 關鍵字的語言,協助搜尋引擎使用正確的斷詞工具。 這些不一定是相同的 LCID,因為 Windows 搜尋提供許多國際版本,也包含多語系使用者介面 (MUI) 套件。 內容地區設定會識別使用者輸入搜尋查詢的語言 LCID,而關鍵字地區設定會識別搜尋引擎在剖析進階查詢語法 (AQS) 關鍵字時所使用的 LCID。
例如,如果您有不含 MUI 套件的英文-US 版本,則內容地區設定和關鍵字地區設定都是 1033。 如果您有不含 MUI 套件的德文版本,則內容地區設定和關鍵字地區設定都是 1031 (gr-gr) 。 不過,如果您有英文版的羅馬尼亞文 MUI 套件,則內容地區設定為 2072 (ro) ,關鍵字地區設定為 1033 (en-us) 。
使用屬性和資料行
方法 | 描述 |
---|---|
ISearchQueryHelper::get_QueryContentProperties/ ISearchQueryHelper::p ut_QueryContentProperties |
取得/設定 CONTAINS 或 FREETEXT 子句中所列之搜尋 (屬性資料行的內容屬性) 。 |
ISearchQueryHelper::get_QuerySelectColumns/ ISearchQueryHelper::p ut_QuerySelectColumns |
取得/設定 SELECT 語句中要求的資料行 (或屬性) 。 預設值為 SYSTEM.ItemUrl,以及 WHERE 子句中使用的屬性。 |
專案會以資料列的形式在屬性存放區中表示。 每個資料列都包含一些資料行,這些資料行代表該專案的屬性。 並非所有專案都有指定屬性的值。 例如,音訊檔案通常不包含 System.Property.FromName 屬性的值,但可能包含 System.Music.Artist 的相關資訊。
使用這些方法,您可以使用逗號分隔、以 Null 結尾的 Unicode 字串來存取或修改屬性存放區:「System.Document.Author, System.Document.Title」 的一或多個資料行名稱。
使用查詢字詞展開
方法 | 描述 |
---|---|
ISearchQueryHelper::get_QueryTermExpansion ISearchQueryHelper::p ut_QueryTermExpansion |
取得/設定搜尋字詞展開旗標。 |
這個方法可讓您使用萬用字元擴充某些查詢詞彙,類似于正則運算式展開。 前置詞展開會搜尋具有相同前置詞的字組, (漏斗圖) 。 如果未設定,則會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::p ut_QueryMaxResults |
取得/設定查詢 (傳回的結果數目上限,也就是 SELECT TOP n) 。 預設值為 -1,表示不會產生任何最大結果子句。 |
ISearchQueryHelper::get_QuerySorting ISearchQueryHelper::p ut_QuerySorting |
取得/設定查詢結果集的排序次序, (ORDER BY) 。 如果沒有 ORDER BY 子句存在,則會以不具決定性的順序傳回結果。 |
ISearchQueryHelper::get_QuerySyntax ISearchQueryHelper::p ut_QuerySyntax |
取得/設定查詢的語法:進階查詢語法或自然查詢語法。 |
ISearchQueryHelper::get_QueryWhereRestrictions ISearchQueryHelper::p ut_QueryWhereRestrictions |
取得/設定透過 WHERE 子句附加的限制。 |
相關主題