Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Többféleképpen is lehet használni a Windows Keresőt az index lekérdezésére. Ez a témakör az Advanced Query Szintaxis (AQS) és a strukturált lekérdezési nyelv (SQL) alapú megközelítéseket ismerteti.
Ez a témakör a következőképpen van rendszerezve:
- SQL-alapú lekérdezések
-
AQS-alapú lekérdezések
- Az ISearchQueryHelper használata
- A search-ms protokoll használata
- Kapcsolódó témakörök
SQL-alapú lekérdezések
Az SQL egy szöveges nyelv, amely meghatározza a lekérdezéseket. Az SQL számos különböző adatbázis-technológiában gyakori. A Windows Search SQL-t használ, implementálja annak egy részhalmazát, és kiterjeszti a nyelv elemeinek hozzáadásával. A Windows Search által használt Windows Search SQL kiterjeszti a szabványos SQL-92 és SQL-99 adatbázis-lekérdezési szintaxis bizonyos részeit, hogy jobban támogassa a szövegalapú kereséseket. A Windows Search SQL minden funkciója kompatibilis a Windows Search szolgáltatással Windows XP és Windows Server 2003 és újabb rendszereken.
A Windows Search SQL szintaxisának használatáról további információt az Index lekérdezése a Windows Search SQL szintaxisával és a Windows Search SQL szintaxisának áttekintésével című témakörben talál.
Az index lekérdezésének alábbi megközelítései az SQL-alapúak.
Az OLE DB használata
Az objektum-összekapcsolási és beágyazási adatbázis (OLE DB) egy komponensobjektum-modell (COM) API, amely lehetővé teszi a különböző típusú adattárak egységes elérését, beleértve a nem relációs adatbázisokat, például a számolótáblákat. Az OLE DB elválasztja az adattárat az alkalmazástól, amely a Shell-adatforrást, munkamenetet, parancsot és sorkészleteket tartalmazó absztrakciókon keresztül fér hozzá. Az OLE DB-szolgáltató egy szoftverösszetevő, amely implementálja az OLE DB interfészt, hogy adatokat biztosítson egy adott adattár alkalmazásainak.
A Windows Search OLE DB-szolgáltatót programozott módon érheti el az OleDbConnection és az OleDbSession objektumokkal c# nyelven, valamint az Active Template Librarybe (ATL) beépített OLE DB-támogatással a C++ fájlban (atlclidb.h). Az egyetlen tulajdonság, amelyet be kell állítani, a szolgáltató karakterlánc.
A következő sztringet használhatja:
provider=Search.CollatorDSO;EXTENDED PROPERTIES="Application=Windows"
A kapcsolati sztringet az ISearchQueryHelper::get_ConnectionString hívásával is lekérheti. Példa: ISearchQueryHelper használata.
Megjegyzés:
A Windows Search OLE DB-szolgáltató írásvédett, és támogatja a SELECT és a GROUP ON utasításokat. Az INSERT és a DELETE utasítás nem támogatott.
#include <atldbcli.h>
CDataSource cDataSource;
hr = cDataSource.OpenFromInitializationString(L"provider=Search.CollatorDSO.1;EXTENDED PROPERTIES=\"Application=Windows\"");
if (SUCCEEDED(hr))
{
CSession cSession;
hr = cSession.Open(cDataSource);
if (SUCCEEDED(hr))
{
CCommand<CDynamicAccessor, CRowset> cCommand;
hr = cCommand.Open(cSession, pszSQL);
if (SUCCEEDED(hr))
{
for (hr = cCommand.MoveFirst(); S_OK == hr; hr = cCommand.MoveNext())
{
for (DBORDINAL i = 1; i <= cCommand.GetColumnCount(); i++)
{
PCWSTR pszName = cCommand.GetColumnName(i);
// do something with the column here
}
}
cCommand.Close();
}
}
}
Az OLE DB-ről további információt az OLE DB programozási áttekintésében talál. Az OLE DB.NET-keretrendszer adatszolgáltatójára vonatkozó információkért tekintse meg a System.Data.OleDb Névtér dokumentációját.
Az ADO és a ADO.net használata
A Microsoft ActiveX Data Objects (ADO) és a ADO.NET lehetővé teszik ügyfélalkalmazások írását az adatbázis-kiszolgálón lévő adatok szolgáltatón keresztüli eléréséhez és kezeléséhez. A Windows Search egy írásvédett technológia: az asztali kereséssel lekérheti az adatokat, de a Windows Search használatával nem módosíthatja az adatokat. A keresés eredményeit azonban átadhatja egy olyan technológiának, amely megváltoztathatja az adatokat.
Az alábbi példakód bemutatja, hogyan nyithat meg kapcsolatot az adatforrással, hogyan hozhat létre és nyithat meg Egy RecordSetet egy Windows Search SQL SELECT utasítással, és hogyan szerezheti be az öt legnagyobb fájl URL-címét az indexből.
Megjegyzés:
A kapcsolatlánc beszerzésére vonatkozóan további információért lásd a(z) Az Index lekérdezése az ISearchQueryHelper és az ISearchQueryHelper::get_ConnectionString részt.
ADO és VBScript
'To run this snippet, save it to a file and run it using cscript.exe from a command line.
'Running the .vbs file with Windows Script Host may cause dialog boxes to open for each item returned from the index.
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
objRecordSet.Open "SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX WHERE scope='file:' ORDER BY System.Size DESC", objConnection
objRecordSet.MoveFirst
Do Until objRecordset.EOF
Wscript.Echo objRecordset.Fields.Item("System.ItemPathDisplay")
objRecordset.MoveNext
Loop
ADO és C++
#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") implementation_only
ADO::_ConnectionPtr connection = NULL;
HRESULT hr = connection.CreateInstance(__uuidof(ADO::Connection));
if (SUCCEEDED(hr))
{
ADO::_RecordsetPtr recordset = NULL;
hr = recordset.CreateInstance(__uuidof(ADO::Recordset));
if (SUCCEEDED(hr))
{
connection->CursorLocation = ADO::adUseClient;
hr = connection->Open(L"Provider=Search.CollatorDSO;Extended Properties='Application=Windows';",
L"", L"", ADO::adConnectUnspecified);
if (SUCCEEDED(hr))
{
hr = recordset->Open("SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX WHERE scope='file:' ORDER BY System.Size DESC",
connection.GetInterfacePtr(), ADO::adOpenForwardOnly, ADO::adLockReadOnly, ADO::adCmdText);
if (SUCCEEDED(hr))
{
while (!recordset->EndOfFile)
{
_variant_t var;
var = recordset->Fields->GetItem(L"System.ItemPathDisplay")->GetValue();
std::cout << static_cast<char *>(_bstr_t(var.bstrVal)) << std::endl;
recordset->MoveNext();
};
recordset->Close();
}
connection->Close();
}
}
}
ADO és VisualBasic
Először adjon hozzá egy hivatkozást az ADODB-hez a projektben
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
con = New ADODB.Connection
rst = New ADODB.Recordset
Dim sConString As String
Dim sSQLString As String
sConString = "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
con.Open(sConString)
sSQLString = "SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX
WHERE scope='file:'
ORDER BY System.Size DESC"
rst = con.Execute(sSQLString)
Do Until (rst.EOF)
Print(1, rst("System.ItemPathDisplay").Value)
rst.MoveNext
Loop
rst.Close
rst = Nothing
con.Close
con = Nothing
Ado.net és C#
string query = @"SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX
WHERE scope='file:'
ORDER BY System.Size DESC";
using (OleDbConnection objConnection =
new OleDbConnection
("Provider=Search.CollatorDSO.1;Extended?Properties='Application=Windows';"))
{
objConnection.Open();
OleDbCommand cmd = new OleDbCommand(query, objConnection);
using (OleDbDataReader rdr = cmd.ExecuteReader())
{
for (int i = 0; i < rdr.FieldCount; i++)
{
Console.Write(rdr.GetName(i));
Console.Write('\t');
}
while (rdr.Read())
{
Console.WriteLine();
for (int i = 0; i < rdr.FieldCount; i++)
{
Console.Write(rdr[i]);
Console.Write('\t');
}
}
Console.ReadKey();
}
}
SQL használata helyi és távoli lekérdezésekben
A lekérdezéseket helyileg vagy távolról is végrehajthatja. Az alábbi példában a FROM záradékot használó helyi lekérdezés látható. Egy helyi lekérdezés csak a helyi SystemIndex-katalógust kérdezi le.
FROM SystemIndex
Az alábbi példában a FROM záradékot használó távoli lekérdezés látható. A ComputerName hozzáadása távoli lekérdezéssé alakítja át az előző példát.
FROM [<ComputerName>.]SystemIndex
Alapértelmezés szerint a Windows XP és a Windows Server 2003 rendszeren nincs telepítve a Windows Search. Csak a Windows Search 4 (WS4) nyújt távoli lekérdezési támogatást. A Windows Desktop Search (WDS) korábbi verziói, például a 3.01-es és korábbi verziók nem támogatják a távoli lekérdezést. A Windows Intézővel lekérdezheti egy távoli számítógép helyi indexét a fájlrendszerelemekhez (a "file:" protokoll által kezelt elemekhez).
Ha távoli lekérdezéssel szeretne lekérni egy elemet, az elemnek meg kell felelnie a következő követelményeknek:
- Legyen elérhető az univerzális elnevezési konvenció (UNC) útján.
- Létezik azon a távoli számítógépen, amelyhez az ügyfél hozzáfér.
- Állítsa be a biztonságot úgy, hogy az ügyfél számára olvasási hozzáférés legyen engedélyezve.
A Windows Intéző olyan funkciókkal rendelkezik az elemek megosztásához, mint a "Nyilvános" megosztás (\\Machine\Public\...) a Hálózati és megosztóközpontban, valamint egy "Felhasználók" megosztás (\\Machine\Users\...) a Megosztás varázslóval megosztott elemekhez. A mappa(ok) megosztása után lekérdezheti a helyi indexet úgy, hogy megadja a távoli számítógép nevét a FROM záradékban, és egy UNC elérési utat a távoli gépen a SCOPE záradékban, ahogyan az alábbi példában látható:
SELECT System.ItemName FROM MachineName.SystemIndex WHERE SCOPE='file://MachineName/<path>'
AQS-alapú lekérdezések
Az AQS a Windows Search által az index lekérdezésére, valamint a keresési paraméterek pontosítására és szűkítésére használt alapértelmezett lekérdezési szintaxis. Bár az AQS elsősorban a felhasználók számára érhető el, a fejlesztők programozott módon készíthetnek lekérdezéseket. A Windows 7-ben bevezették a canonical AQS-t, amelyet a Windows 7-ben és újabb verziókban kell használni az AQS-lekérdezések programozott létrehozásához. Az AQS-sel kapcsolatos részletes információkért lásd: Speciális lekérdezési szintaxis programozott használata.
Az index lekérdezésének következő megközelítései az AQS-alapúak.
Az ISearchQueryHelper használata
Az ISearchQueryHelper felülettel létrehozhat egy összetevő- vagy segédosztályt, amellyel lekérdezheti az indexet, így kihasználhatja a rendszer egyes funkcióit, és leegyszerűsítheti a Windows Search használatát. Ez a felület a következőkben nyújt segítséget:
- Szerezze be az OLE DB kapcsolati sztringet a Windows Search-adatbázishoz való csatlakozáshoz.
- Felhasználói lekérdezések konvertálása az AQS-ből Windows Search SQL-be.
Ez a felület az ISearchCatalogManager segédosztályaként van implementálva, és az ISearchCatalogManager::GetQueryHelper meghívásával érhető el, ahogyan az a következő C++ példában is látható.
HRESULT GetQueryHelper(ISearchQueryHelper **ppQueryHelper)
{
*ppQueryHelper = NULL;
// Create an instance of the search manager
ISearchManager *pSearchManager;
HRESULT hr = CoCreateInstance(__uuidof(CSearchManager), NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));
if (SUCCEEDED(hr))
{
// Get the catalog manager from the search manager
ISearchCatalogManager *pSearchCatalogManager;
hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);
if (SUCCEEDED(hr))
{
// Get the query helper from the catalog manager
hr = pSearchCatalogManager->GetQueryHelper(ppQueryHelper);
pSearchCatalogManager->Release();
}
pSearchManager->Release();
}
return hr;
}
Az ISearchQueryHelper felület implementálásához lásd az ISearchQueryHelper felület és az ISearchQueryHelper referenciatémakör használatát.
Megjegyzés:
Régi Microsoft Windows Desktop Search (WDS) 2x kompatibilitás: Windows XP és Windows Server 2003 és újabb rendszerű számítógépeken az ISearchDesktop elavult. Ehelyett a fejlesztőknek az ISearchQueryHelper használatával kell lekérni egy kapcsolati sztringet, elemezni kell a felhasználó lekérdezését az SQL-ben, majd lekérdezni az OLE DB-n keresztül.
A search-ms protokoll használata
A search-msalkalmazásprotokoll egy olyan konvenció, amely egy alkalmazás( például a Windows Explorer) indítására alkalmas a Windows Search index lekérdezéséhez. Lehetővé teszi a lekérdezések paraméter-érték argumentumokkal való létrehozását, beleértve a tulajdonságargumentumokat, a korábban mentett kereséseket, a speciális lekérdezési szintaxist (AQS), a természetes lekérdezési szintaxist (NQS) és a nyelvi kódazonosítókat (LCID-ket) mind az indexelőhöz, mind magához a lekérdezéshez.
A search-ms protokoll szintaxisával kapcsolatos részletes információkért lásd : Az index lekérdezése a search-ms Protocol használatával.