Abfragen des Index mit ISearchQueryHelper
Sie können die ISearchQueryHelper-Schnittstelle verwenden, um den Index abzufragen. Diese Schnittstelle wird als Hilfsklasse für ISearchCatalogManager (und ISearchCatalogManager2) implementiert und durch Aufrufen von ISearchCatalogManager::GetQueryHelper abgerufen. Mit dieser Schnittstelle können Sie Folgendes ausführen:
- Rufen Sie eine OLE DB-Verbindungszeichenfolge ab, um eine Verbindung mit der Windows Search-Datenbank herzustellen.
- Konvertieren von AQS-Benutzerabfragen (Advanced Query Syntax) in Windows Search strukturierte Abfragesprache (SQL).
- Geben Sie Abfrageeinschränkungen an, die in SQL, aber nicht in AQS ausgedrückt werden können.
Dieses Thema ist wie folgt organisiert:
- Erste Schritte mit ISearchQueryHelper
- Verwenden der GenerateSqlFromUserQuery-Methode
- Arbeiten mit Gebietsschemabezeichnern
- Arbeiten mit Eigenschaften und Spalten
- Arbeiten mit der Erweiterung von Abfragebegriffen
- Arbeiten mit anderen ISearchQueryHelper-Methoden
- Zugehörige Themen
Erste Schritte mit ISearchQueryHelper
Es gibt einige wichtige Schnittstellen und Methoden, die Sie kennen sollten, bevor Sie mit dem programmgesteuerten Abfragen von Windows Search mithilfe der ISearchQueryHelper-Schnittstelle beginnen können. Auf hoher Ebene müssen Sie die folgenden Schritte ausführen:
Instanziieren Sie einen ISearchManager-instance.
// Create ISearchManager instance ISearchManager* pSearchManager; // Use library SearchSDK.lib for CLSID_CSearchManager. hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));
Rufen Sie mithilfe von ISearchManager::GetCatalog eine instance von ISearchCatalog ab. Der Name des Systemkatalogs für Windows Search lautet
SYSTEMINDEX
.// Create ISearchCatalogManager instance ISearchCatalogManager* pSearchCatalogManager; // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);
Rufen Sie mithilfe von ISearchCatalogManager::GetQueryHelper eine instance von ISearchQueryQueryHelper ab.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
Nachdem Sie über einen instance von ISearchQueryHelper verfügen, können Sie die Verbindungszeichenfolge abrufen, die zum Herstellen einer Verbindung mit dem OLE DB-Connector für den Windows Search-Index verwendet wird.
// 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
Verwenden der GenerateSqlFromUserQuery-Methode
Die ISearchQueryHelper::GenerateSQLFromUserQuery-Methode transformiert Benutzereingaben in eine SQL-Abfragezeichenfolge, die dann an den OLE DB-Anbieter für Windows Search übermittelt werden kann. Diese Methode übersetzt die vom Benutzer eingegebene Abfragesyntax (Advanced Query Syntax , AQS) oder natürliche Abfragesyntax (NQS) in SQL und ermöglicht es Ihnen, nach Bedarf weitere SQL-Fragmente hinzuzufügen.
Die SQL-Abfragezeichenfolge wird in der folgenden Form zurückgegeben:
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> ]
Es folgt ein Beispiel für die SQL-Zeichenfolge, die vom Aufruf GenerateSQLFromUserQuery("comput")
zurückgegeben wird:
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"
Hinweis
Die -Methode generiert sowohl die FREETEXT- als auch die CONTAINS-Prädikate, da CONTAINS allein keine aussagekräftige Rangfolge generiert.
Arbeiten mit Gebietsschemabezeichnern
Methode | Beschreibung |
---|---|
ISearchQueryHelper::get_QueryContentLocale/ ISearchQueryHelper::p ut_QueryContentLocale |
Ruft den Sprachcodebezeichner (Language Code Identifier, LCID) der Abfrage ab/legt sie ab. Dadurch erhalten Sie den richtigen Wordbreaker und Stemmer, um Abfragebegriffe mit dem Katalog/invertierten Index zu vergleichen. Der Standardwert ist das aktuelle Eingabegebietsschema. |
ISearchQueryHelper::get_QueryKeywordLocale/ ISearchQueryHelper::p ut_QueryKeywordLocale |
Ruft die LCID für die Sprache ab, die beim Analysieren von AQS-Schlüsselwörtern (Advanced Query Syntax) verwendet werden soll. Der Standardwert ist das Standardgebietsschema des Benutzers. |
Das Inhaltsgebietsschema und Schlüsselwort (keyword) Gebietsschemas sind Gebietsschemabezeichner (LCID), die der Suchmaschine helfen, die richtigen Worttrennungen zu verwenden, indem die Sprache der Abfragebegriffe und die Sprache der AQS-Schlüsselwörter identifiziert werden. Dies sind nicht immer dieselben LCIDs, da Windows Search in einer Reihe von internationalen Versionen angeboten wird und auch MUI-Pakete (Multilingual User Interface) für mehr Sprachen enthält. Das Inhaltsgebietsschema identifiziert die LCID für die Sprache, in die Benutzer ihre Suchabfrage eingeben, während das Schlüsselwort (keyword) Gebietsschema die LCID identifiziert, die die Suchmaschine beim Analysieren von AQS-Schlüsselwörtern (Advanced Query Syntax) verwendet.
Wenn Sie beispielsweise über die Englisch-US-Version ohne MUI-Pakete verfügen, sind sowohl das Inhaltsgebietsschema als auch Schlüsselwort (keyword) Gebietsschema 1033. Wenn Sie über die deutsche Version ohne MUI-Pakete verfügen, sind sowohl das Inhaltsgebietsschema als auch Schlüsselwort (keyword) Gebietsschema 1031 (gr-gr). Wenn Sie jedoch über die englische Version mit dem rumänischen MUI-Paket verfügen, ist das Inhaltsgebietsschema 2072 (ro) und das Schlüsselwort (keyword) Gebietsschema 1033 (en-us).
Arbeiten mit Eigenschaften und Spalten
Methoden | BESCHREIBUNG |
---|---|
ISearchQueryHelper::get_QueryContentProperties/ ISearchQueryHelper::p ut_QueryContentProperties |
Ruft die Inhaltseigenschaften für die Suche ab (Eigenschaftsspalte, die in der CONTAINS- oder FREETEXT-Klausel aufgeführt ist). |
ISearchQueryHelper::get_QuerySelectColumns/ ISearchQueryHelper::p ut_QuerySelectColumns |
Ruft die in der SELECT-Anweisung angeforderten Spalten (oder Eigenschaften) ab/legt sie fest. Der Standardwert ist System.ItemUrl und eigenschaften, die in der WHERE-Klausel verwendet werden. |
Elemente werden im Eigenschaftenspeicher als Zeile dargestellt. Jede Zeile enthält eine Reihe von Spalten, die Eigenschaften für dieses Element darstellen. Nicht alle Elemente verfügen über einen Wert für eine bestimmte Eigenschaft. Beispielsweise enthält eine Audiodatei in der Regel keinen Wert für die System.Property.FromName-Eigenschaft, sondern möglicherweise Informationen zu System.Music.Artist.
Mit diesen Methoden greifen Sie auf die Eigenschaft mit einer durch Trennzeichen getrennten, NULL-beendeten Unicode-Zeichenfolge zu oder ändern sie, die einen oder mehrere Spaltennamen des Eigenschaftenspeichers angibt: "System.Document.Author, System.Document.Title".
Arbeiten mit der Erweiterung von Abfragebegriffen
Methoden | BESCHREIBUNG |
---|---|
ISearchQueryHelper::get_QueryTermExpansion ISearchQueryHelper::p ut_QueryTermExpansion |
Ruft das Erweiterungsflag des Suchbegriffs ab/legt diese fest. |
Diese Methode ermöglicht die Erweiterung einiger Abfragebegriffe mit wilden Karte Zeichen, ähnlich der Erweiterung regulärer Ausdrücke. Die Präfixerweiterung sucht nach Wörtern mit demselben Präfix (Fun/Trichter). Wenn nicht festgelegt, ist der Standardwert SEARCH_TERM_PREFIX_ALL. Die unterstützten Werte der SEARCH_TERM_EXPANSION-Enumeration sind wie folgt:
- SEARCH_TERM_PREFIX_ALL : Alle Suchbegriffe werden erweitert
- SEARCH_TERM_NO_EXPANSION : Keine Suchbegriffe erweitert
Arbeiten mit anderen ISearchQueryHelper-Methoden
Viele der Methoden in der ISearchQueryHelper-Schnittstelle werden verwendet, um Abfrageargumente festzulegen oder die zurückgegebenen Eigenschaften zu definieren.
Methoden | BESCHREIBUNG |
---|---|
ISearchQueryHelper::get_ConnectionString |
Gibt die OLE DB-Verbindungszeichenfolge zurück. Dies ist die bevorzugte Methode zum Abrufen einer ordnungsgemäß formatierten und korrekten Verbindungszeichenfolge. |
ISearchQueryHelper::get_QueryMaxResults ISearchQueryHelper::p ut_QueryMaxResults |
Ruft die maximale Anzahl von Ergebnissen ab, die von einer Abfrage zurückgegeben werden sollen (d. a. SELECT TOP n). Der Standardwert ist -1, was bedeutet, dass keine Klausel für maximale Ergebnisse generiert wird. |
ISearchQueryHelper::get_QuerySorting ISearchQueryHelper::p ut_QuerySorting |
Ruft die Sortierreihenfolge für das Abfrageergebnissatz ab (ORDER BY). Wenn keine ORDER BY-Klausel vorhanden ist, werden die Ergebnisse in nicht deterministischer Reihenfolge zurückgegeben. |
ISearchQueryHelper::get_QuerySyntax ISearchQueryHelper::p ut_QuerySyntax |
Ruft die Syntax der Abfrage ab/legt sie fest: Erweiterte Abfragesyntax oder natürliche Abfragesyntax. |
ISearchQueryHelper::get_QueryWhereRestrictions ISearchQueryHelper::p ut_QueryWhereRestrictions |
Ruft die Einschränkungen ab, die über WHERE-Klauseln angefügt werden. |
Zugehörige Themen