Programmgesteuertes Aufrufen von WDS
Hinweis
Windows Desktop Search 2.x ist eine veraltete Technologie, die ursprünglich als Add-In für Windows XP und Windows Server 2003 verfügbar war. Verwenden Sie in späteren Versionen stattdessen Windows Search .
Microsoft Windows Desktop Search (WDS) 2.x kann programmgesteuert mit den Methoden ExecuteQuery und ExecuteSQLQuery in der ISearchDesktop-Schnittstelle abgefragt werden. Die ExecuteQuery-Methode gibt einen Datensatzsatz aus dem Index basierend auf dem Abfragetext, den Spalten und den Einschränkungen zurück, die als Parameter übergeben werden. Die ExecuteSQLQuery-Methode gibt auch einen Datensatzsatz von Ergebnissen zurück, erfordert jedoch, dass genau der SQL-Befehl (strukturierte Abfragesprache) übergeben wird. ExecuteQuery sollte in den meisten Szenarien verwendet werden.
Reguläre Abfragen
Reguläre Abfragen sind solche, die vom Benutzer in das WDS-Eingabefeld eingegeben werden, einschließlich der gesamten erweiterten Abfragesyntax. Die Abfrage wird zusammen mit den zurückzugebenden WDS 2.x-Schemaspalten, der Spalte und reihenfolge zum Sortieren der Ergebnisse sowie allen Klauseln zum Einschränken der Ergebnisse an ExecuteQuery übergeben.
Die -Methode hat folgende Form:
HRESULT ExecuteQuery(LPCWSTR lpcwstrQuery, LPCWSTR lpcwstrColumn, LPCWSTR lpcwstrSort, LPCWSTR lpcwstrRestriction, Recordset **ppiRs);
Direction | Variable | BESCHREIBUNG |
---|---|---|
In | lpcwstrQuery | Der Abfragetext. Diese Abfrage ist identisch mit einer Abfrage, die in das Suchtextfeld auf der Benutzeroberfläche der Windows-Desktopsuche eingegeben wird. Beispiel: "from:Zara dinner plans" |
In | lpcwstrColumn | Die einzuschließenden Spalten, getrennt durch Kommas. Beispiel: "DocTitle, Url" |
In | lpcwstrSort | Die zu sortierende Außerkraftsetzungsspalte gefolgt von ASC für aufsteigend oder DESC für absteigend. Beispiel: "LastAuthor DESC" |
In | lpcwstrRestriction | Einschränkungen zum Anfügen durch WHERE-Klauseln in der Windows Desktop Search-Auswahl. Beispiel: "Contains(LastAuthor, 'Bill')" |
aus | ppiRs | Der resultierende Datensatzsatz |
SQL-Abfragen
Die ISearchDesktop.ExecuteSQLQuery-Methode wird verwendet, um direkte WDS-Datenbankabfragen zu senden. Die Syntax für die Abfragen ähnelt der syntax, die für SharePoint Server verwendet wird, zusammen mit der Möglichkeit, SQL GROUP BY-Klauseln im Monarch-Stil zu verwenden. Die Abfrage wird für den Index genau so ausgeführt, wie sie übergeben wird, ohne dass die erweiterte Abfragesyntax wie die ExecuteQuery-API zusätzlich verarbeitet wird.
Die -Methode hat folgende Form:
HRESULT ExecuteSQLQuery(LPCWSTR lpcwstrSQL, Recordset **ppiRs);
Direction | Variable | BESCHREIBUNG |
---|---|---|
In | lpcwstrSQL | Die SQL-Abfrage, die für den WDS-Index ausgeführt werden soll |
aus | ppiRs | Der resultierende Datensatzsatz |
C++-Beispielcode
Hinweis
DIESER CODE UND DIE INFORMATIONEN WERDEN OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT, EINSCHLIEßLICH, ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN DER HANDELSÜBLICHKEIT UND/ODER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
Copyright (C) Microsoft. Alle Rechte vorbehalten.
#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();
}