共用方式為


以程式設計方式呼叫 WDS

注意

Windows Desktop Search 2.x 是一種過時的技術,原本可作為 Windows XP 和 Windows Server 2003 的增益集使用。 在較新版本中,請改用 Windows 搜尋

您可以使用ISearchDesktop介面中的ExecuteQueryExecuteSQLQuery方法,以程式設計方式查詢 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();
}

參考

進階查詢語法

認知類型

從網頁呼叫 WDS