Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt de ISearchQueryHelper interface gebruiken om een query uit te voeren op de index. Deze interface wordt geïmplementeerd als helperklasse voor ISearchCatalogManager (en ISearchCatalogManager2) en wordt verkregen door ISearchCatalogManager::GetQueryHelperaan te roepen. Met deze interface kunt u het volgende doen:
- Haal een OLE DB-verbindingsreeks op om verbinding te maken met de Windows Search-database.
- AQS-gebruikersvragen (Advanced Query Syntax) omzetten naar Windows Search Structured Query Language (SQL).
- Geef querybeperkingen op die kunnen worden uitgedrukt in SQL, maar niet in AQS.
Dit onderwerp is als volgt ingedeeld:
- Aan de slag met ISearchQueryHelper
- de methode GenerateSqlFromUserQuery gebruiken
- Werken met taal- en regio-instellingen-id's
- Werken met eigenschappen en kolommen
- Werken met queryterm-uitbreiding
- Werken met andere ISearchQueryHelper-methoden
- Verwante onderwerpen
Aan de slag met ISearchQueryHelper
Er zijn enkele belangrijke interfaces en methoden waar u rekening mee moet houden voordat u programmatisch query's kunt uitvoeren op Windows Search met behulp van de ISearchQueryHelper interface. Op hoog niveau moet u deze stappen uitvoeren:
Instantieer een ISearchManager instantie.
// Create ISearchManager instance ISearchManager* pSearchManager; // Use library SearchSDK.lib for CLSID_CSearchManager. hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));Verkrijg een exemplaar van ISearchCatalogManager met behulp van ISearchManager::GetCatalog. De naam van de systeemcatalogus voor Windows Search is
SYSTEMINDEX.// Create ISearchCatalogManager instance ISearchCatalogManager* pSearchCatalogManager; // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);Haal een exemplaar van ISearchQueryHelper- op met behulp van ISearchCatalogManager::GetQueryHelper.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);Nadat u een exemplaar van ISearchQueryHelperhebt, kunt u de verbindingsreeks ophalen die wordt gebruikt om verbinding te maken met de OLE DB-connector van de Windows Search-index.
// Call get_ConnectionString to get the OLE DB connection string LPWSTR pszConnectionString=NULL; hr = pQueryHelper->get_ConnectionString(&pszConnectionString); // NOTE: YOU MUST call CoTaskMemFree() on the string
De methode GenerateSqlFromUserQuery gebruiken
De methode ISearchQueryHelper::GenerateSQLFromUserQuery transformeert gebruikersinvoer in een SQL-queryreeks, die vervolgens kan worden verzonden naar de OLE DB-provider voor Windows Search. Met deze methode wordt de Advanced Query Syntax (AQS) of NQS-query (Natural Query Syntax) die door de gebruiker is ingevoerd, omgezet in SQL en kunt u indien nodig andere SQL-fragmenten toevoegen.
De SQL-queryreeks wordt geretourneerd in de volgende vorm:
SELECT <QuerySelectColumns>
FROM <CatalogName that created query helper>
WHERE <Result of interpreting the user query passed into this function according to QuerySyntax>
[ AND|OR <QueryWhereRestrictions> ]
Hier volgt een voorbeeld van de SQL-tekenreeks die wordt geretourneerd door de aanroep GenerateSQLFromUserQuery("comput"):
SELECT "System.ItemUrl"
FROM "SystemIndex"
WHERE ((CONTAINS(*,'"comput*"',1033) RANK BY COERCION(Absolute, 1)) OR
(FREETEXT(("System.ItemNameDisplay":0.9, *:0.1), 'comput', 1033) AND CONTAINS(*,'"comput"',1033)))
ORDER BY "System.ItemUrl"
Notitie
Met de methode worden zowel de FREETEXT- als de CONTAINS-predicaten gegenereerd, omdat CONTAINS alleen geen zinvolle rangschikking genereert.
Werken met locale-id's
| Methode | Beschrijving |
|---|---|
|
ISearchQueryHelper::get_QueryContentLocale/ ISearchQueryHelper::put_QueryContentLocale |
Haalt/plaatst de taalcode-id (LCID) van de query. Dit helpt om de juiste woordbreker en stemmer te verkrijgen om querytermen te vergelijken met de catalogus/omgekeerde index. De standaardinstelling is de huidige landinstelling voor invoer. |
|
ISearchQueryHelper::get_QueryKeywordLocale/ ISearchQueryHelper::put_QueryKeywordLocale |
Hiermee haalt/plaatst u de LCID voor de taal die moet worden gebruikt bij het parseren van AQS-trefwoorden (Advanced Query Syntax). De standaardinstelling is de standaardinstelling van de gebruiker. |
De taalinstellingen van de inhoudsinstellingen en trefwoordinstellingen zijn landinstellings-id's (LCID) waarmee de zoekmachine de juiste woordonderbrekers kan gebruiken door de taal van de querytermen en de taal van de AQS-trefwoorden te identificeren. Dit zijn niet altijd dezelfde LCID's omdat Windows Search wordt aangeboden in een aantal internationale versies en ook meertalige MUI-pakketten (User Interface) bevat voor meer talen. De landinstelling voor inhoud identificeert de LCID voor de taal waarin gebruikers hun zoekquery invoeren, terwijl de landinstelling voor trefwoorden de LCID identificeert die door de zoekmachine wordt gebruikt bij het parseren van AQS-trefwoorden (Advanced Query Syntax).
Als u bijvoorbeeld de English-US versie zonder MUI-pakketten hebt, zijn zowel de landinstelling van de inhoud als de landinstelling voor trefwoorden 1033. Als u de Duitse versie zonder MUI-pakketten hebt, zijn zowel de landinstelling van de inhoud als de landinstelling voor trefwoorden 1031 (gr-gr). Als u echter de Engelse versie met het Roemeense MUI-pakket hebt, is de landinstelling voor inhoud 2072 (ro) en is de landinstelling voor trefwoorden 1033 (en-us).
Werken met eigenschappen en kolommen
| Methoden | Beschrijving |
|---|---|
|
ISearchQueryHelper::get_QueryContentProperties/ ISearchQueryHelper::put_QueryContentProperties |
Stelt de eigenschapswaarden in voor de zoekopdracht (eigenschapskolom die wordt vermeld in de CONTAINS- of FREETEXT-clausules). |
|
ISearchQueryHelper::get_QuerySelectColumns/ ISearchQueryHelper::put_QuerySelectColumns |
Hiermee haalt/stelt u de kolommen (of eigenschappen) in die zijn aangevraagd in de SELECT-instructie. De standaardwaarde is System.ItemUrl en eigenschappen die worden gebruikt in de WHERE-component. |
Items worden weergegeven in de eigenschappenopslag als een rij. Elke rij bevat een aantal kolommen die eigenschappen voor dat item vertegenwoordigen. Niet alle items hebben een waarde voor een bepaalde eigenschap. Een audiobestand bevat bijvoorbeeld meestal geen waarde voor de eigenschap System.Property.FromName, maar kan informatie bevatten met betrekking tot system.Music.Artist.
Met deze methoden opent of wijzigt u de eigenschap met een door komma's gescheiden, null-beëindigde Unicode-tekenreeks die een of meer kolomnamen van het eigenschappenarchief opgeeft: 'System.Document.Author, System.Document.Title'.
Werken met uitbreiding van querytermen
| Methoden | Beschrijving |
|---|---|
|
ISearchQueryHelper::get_QueryTermExpansion ISearchQueryHelper::put_QueryTermExpansion |
Hiermee haalt/stelt u de uitbreidingsvlag voor zoektermen in. |
Met deze methode kunt u sommige querytermen uitbreiden met jokertekens, vergelijkbaar met de reguliere expressie-uitbreiding. Voorvoegseluitbreiding zoekt naar woorden met hetzelfde voorvoegsel (plezier/trechter). Als deze niet is ingesteld, wordt de standaardwaarde SEARCH_TERM_PREFIX_ALL. De ondersteunde waarden van de opsomming SEARCH_TERM_EXPANSION zijn als volgt:
- SEARCH_TERM_PREFIX_ALL - Alle zoektermen zijn uitgebreid
- SEARCH_TERM_NO_EXPANSION - Er worden geen zoektermen uitgebreid
Werken met andere ISearchQueryHelper-methoden
Veel van de methoden in de ISearchQueryHelper interface worden gebruikt om queryargumenten in te stellen of de geretourneerde eigenschappen te definiëren.
| Methoden | Beschrijving |
|---|---|
|
ISearchQueryHelper::get_ConnectionString |
Retourneert de OLE DB-verbindingsreeks. Dit is de aanbevolen methode voor het verkrijgen van een correct opgemaakte en juiste connectiestring. |
|
ISearchQueryHelper::get_QueryMaxResults ISearchQueryHelper::put_QueryMaxResults |
Hiermee wordt het maximum aantal resultaten dat door een query moet worden geretourneerd (d.w.z. SELECT TOP n) gehaald/gesteld. De standaardwaarde is -1, wat betekent dat er geen maximumresultatencomponent wordt gegenereerd. |
|
ISearchQueryHelper::get_QuerySorting ISearchQueryHelper::put_QuerySorting |
Hiermee haalt/stelt u de sorteervolgorde voor de queryresultatenset (ORDER BY) in. Als er geen ORDER BY-component bestaat, worden de resultaten geretourneerd in niet-deterministische volgorde. |
|
ISearchQueryHelper::get_QuerySyntax ISearchQueryHelper::put_QuerySyntax |
Hiermee haalt/stelt u de syntaxis van de query op: Geavanceerde querysyntaxis of natuurlijke querysyntaxis. |
|
ISearchQueryHelper::get_QueryWhereRestrictions ISearchQueryHelper::put_QueryWhereRestrictions |
Hiermee worden de beperkingen opgehaald/ingesteld die via WHERE-clausules worden toegevoegd. |
Verwante onderwerpen
-
SQL- en AQS-benaderingen gebruiken om een query uit te voeren op de index
-
query's uitvoeren op de index met de SQL-syntaxis van Windows Search