以程式設計方式呼叫 WDS
注意
Windows Desktop Search 2.x 是一種過時的技術,原本可作為 Windows XP 和 Windows Server 2003 的增益集使用。 在較新版本中,請改用 Windows 搜尋 。
您可以使用ISearchDesktop介面中的ExecuteQuery和ExecuteSQLQuery方法,以程式設計方式查詢 Microsoft Windows 桌面搜尋 (WDS) 2.x。 ExecuteQuery方法會根據傳遞為參數的查詢文字、資料行和限制,從索引傳回記錄集。 ExecuteSQLQuery方法也會傳回一組記錄結果,但需要傳入確切結構化查詢語言 (SQL) (SQL) 命令。 大部分情況下都應該使用ExecuteQuery。
一般查詢
一般查詢是由使用者輸入 WDS 輸入方塊中輸入的查詢,包括所有 進階查詢語法。 查詢會連同要傳回的 WDS 2.x架構資料行一起傳遞至ExecuteQuery、排序結果的資料行和順序,以及限制結果的任何子句。
方法的格式如下:
HRESULT ExecuteQuery(LPCWSTR lpcwstrQuery, LPCWSTR lpcwstrColumn, LPCWSTR lpcwstrSort, LPCWSTR lpcwstrRestriction, Recordset **ppiRs);
方向 | 變數 | Description |
---|---|---|
位於 | lpcwstrQuery | 查詢文字。 此查詢與在 Windows 桌面搜尋使用者介面的搜尋文字方塊中輸入的查詢相同。 例如: "from:Zara dinner plans" |
位於 | lpcwstrColumn | 要包含的資料行,以逗號分隔。 例如: "DocTitle, Url" |
位於 | lpcwstrSort | 要排序的覆寫資料行,後面接著 ASC 進行遞增或 DESC 遞減。 例如: "LastAuthor DESC" |
位於 | lpcwstrRestriction | 在 Windows 桌面搜尋選取中透過 WHERE 子句附加的限制。 例如: "Contains(LastAuthor, 'Bill')" |
外 | ppiRs | 產生的記錄集 |
SQL 查詢
ISearchDesktop.ExecuteSQLQuery方法可用來傳送直接 WDS 資料庫查詢。 查詢的語法與用於 SharePoint Server 的語法類似,以及使用「新式 SQL GROUP BY」子句的能力。 查詢會與傳入的索引完全一樣執行,而且 ExecuteQuery API 不會執行進階查詢語法的額外處理。
方法的格式如下:
HRESULT ExecuteSQLQuery(LPCWSTR lpcwstrSQL, Recordset **ppiRs);
方向 | 變數 | Description |
---|---|---|
位於 | lpcwstrSQL | 要針對 WDS 索引執行的 SQL 查詢 |
外 | ppiRs | 產生的記錄集 |
範例 C++ 程式碼
注意
此程式碼和資訊是以「原狀」提供,不含任何種類的擔保,不論是明示或隱含,包括但不限於適售性及/或適合特定用途的默示擔保。
著作權 (C) Microsoft。 著作權所有,並保留一切權利。
#include <stdio.h>
#include <wchar.h>
#include <windows.h>
#include <msnldl.h>
#include <adoint.h>
#include <adoguids.h>
HRESULT TestExecuteQuery(ISearchDesktop *psd)
{
ADORecordset *prs = NULL;
HRESULT hr;
hr = psd->ExecuteQuery( L"ToName:Moishe",
L"DocTitle,DocFormat",
L"PrimaryDate DESC",
L"Contains('text')",
&prs);
if (SUCCEEDED(hr))
prs->Release();
return hr;
}
HRESULT TestExecuteSQLQuery(ISearchDesktop *psd)
{
ADORecordset *prs = NULL;
HRESULT hr;
hr = psd->ExecuteSQLQuery(L"select DocTitle from MyIndex..Scope() where contains('text')", &prs);
if (SUCCEEDED(hr))
prs->Release();
return hr;
}
extern "C" int __cdecl wmain( int argc, WCHAR * argv[] )
{
SCODE sc = CoInitialize(0);
ISearchDesktop *psd = NULL;
HRESULT hr;
if (SUCCEEDED(hr = CoCreateInstance(__uuidof(SearchDesktop), NULL, CLSCTX_INPROC_SERVER,
__uuidof(ISearchDesktop), (void**)&psd)))
{
TestExecuteSQLQuery(psd);
TestExecuteQuery(psd);
psd->Release();
}
CoUninitialize();
}