以编程方式调用 WDS
注意
Windows 桌面搜索 2.x 是一种过时的技术,最初作为 Windows XP 和 Windows Server 2003 的加载项提供。 在更高版本中,请改用 Windows 搜索 。
可以使用 ISearchDesktop 接口中的 ExecuteQuery 和 ExecuteSQLQuery 方法以编程方式查询 Microsoft Windows 桌面搜索 (WDS) 2.x。 ExecuteQuery 方法基于作为参数传递的查询文本、列和限制从索引返回记录集。 ExecuteSQLQuery 方法还返回结果的记录集,但需要传入确切结构化查询语言 (SQL) 命令。 在大多数情况下,应使用 ExecuteQuery。
常规查询
常规查询是用户在 WDS 输入框中键入的查询,包括所有 高级查询语法。 该查询将连同要返回的 WDS 2.x 架构列、对结果进行排序的列和顺序以及用于限制结果的任何子句一起传递给 ExecuteQuery。
方法采用以下形式:
HRESULT ExecuteQuery(LPCWSTR lpcwstrQuery, LPCWSTR lpcwstrColumn, LPCWSTR lpcwstrSort, LPCWSTR lpcwstrRestriction, Recordset **ppiRs);
方向 | 变量 | 说明 |
---|---|---|
在 | lpcwstrQuery | 查询文本。 此查询与在 Windows 桌面搜索用户界面的搜索文本框中键入的查询相同。 例如: "from:Zara dinner plans" |
在 | lpcwstrColumn | 要包括的列,用逗号分隔。 例如: "DocTitle, Url" |
在 | lpcwstrSort | 要排序的替代列,后跟 ASC(升序)或 DESC(降序)。 例如: "LastAuthor DESC" |
在 | lpcwstrRestriction | 在 Windows 桌面搜索中选择通过 WHERE 子句追加的限制。 例如: "Contains(LastAuthor, 'Bill')" |
出 | ppiR | 生成的记录集 |
SQL 查询
ISearchDesktop.ExecuteSQLQuery 方法用于发送直接 WDS 数据库查询。 查询的语法类似于用于 SharePoint Server 的语法,还能够使用君主式 SQL GROUP BY 子句。 查询对索引执行的方式与传入索引完全一样,不会像 ExecuteQuery API 那样对高级查询语法进行额外的处理。
方法采用以下形式:
HRESULT ExecuteSQLQuery(LPCWSTR lpcwstrSQL, Recordset **ppiRs);
方向 | 变量 | 说明 |
---|---|---|
在 | lpcwstrSQL | 要针对 WDS 索引执行的 SQL 查询 |
出 | ppiR | 生成的记录集 |
示例 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();
}