Программный вызов служб WDS
Примечание
Windows Desktop Search 2.x — это устаревшая технология, которая изначально была доступна в качестве надстройки для Windows XP и Windows Server 2003. В более поздних выпусках используйте Windows Search .
Microsoft Windows Desktop Search (WDS) 2.x можно запрашивать программным способом с помощью методов ExecuteQuery и ExecuteSQLQuery в интерфейсе ISearchDesktop . Метод ExecuteQuery возвращает набор записей из индекса на основе текста запроса, столбцов и ограничений, переданных в качестве параметров. Метод ExecuteSQLQuery также возвращает набор результатов, но требует точной команды язык SQL (SQL). ExecuteQuery следует использовать в большинстве сценариев.
Обычные запросы
Обычные запросы — это запросы, введенные пользователем в поле ввода WDS, включая все расширенные синтаксиса запросов. Запрос передается в ExecuteQuery вместе с возвращаемыми столбцами схемы WDS 2.x, столбцом и порядком сортировки результатов, а также любыми предложениями, ограничивающими результаты.
Метод имеет следующий вид:
HRESULT ExecuteQuery(LPCWSTR lpcwstrQuery, LPCWSTR lpcwstrColumn, LPCWSTR lpcwstrSort, LPCWSTR lpcwstrRestriction, Recordset **ppiRs);
Направление | Переменная | Описание |
---|---|---|
В | lpcwstrQuery | Текст запроса. Этот запрос совпадает с запросом, введенным в текстовое поле поиска в пользовательском интерфейсе Windows Desktop Search. Пример: "from:Zara dinner plans" |
В | lpcwstrColumn | Столбцы для включения, разделенные запятыми. Пример: "DocTitle, Url" |
В | lpcwstrSort | Столбец переопределения для сортировки, за которым следует ASC для возрастания или DESC для убывания. Пример: "LastAuthor DESC" |
В | lpcwstrRestriction | Ограничения для добавления с помощью предложений WHERE в поиске на рабочем столе Windows. Пример: "Contains(LastAuthor, 'Bill')" |
Исходящий | ppiRs | Результирующий набор записей |
Запросы SQL
Метод ISearchDesktop.ExecuteSQLQuery используется для отправки прямых запросов к базе данных WDS. Синтаксис запросов аналогичен синтаксису, используемому для SharePoint Server, наряду с возможностью использования предложений SQL GROUP BY в стиле Monarch. Запрос выполняется по индексу точно так же, как он передается, без дополнительной обработки расширенного синтаксиса запросов, как это делает API ExecuteQuery.
Метод имеет следующий вид:
HRESULT ExecuteSQLQuery(LPCWSTR lpcwstrSQL, Recordset **ppiRs);
Направление | Переменная | Описание |
---|---|---|
В | lpcwstrSQL | SQL-запрос для выполнения к индексу WDS |
Исходящий | ppiRs | Результирующий набор записей |
Пример кода C++
Примечание
ЭТОТ КОД И ИНФОРМАЦИЯ ПРЕДОСТАВЛЯЮТСЯ "КАК ЕСТЬ" БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ И/ИЛИ ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.
(C) Корпорация Майкрософт. Все права защищены.
#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();
}