Freigeben über


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

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:

  1. 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));      
    
  2. 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);
    
    
  3. 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);
    
    
  4. 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.

 

Programm gesteuertes Abfragen des Indexes

Verwenden von SQL- und AQS-Ansätzen zum Abfragen des Indexes

Abfragen des Indexes mit dem search-ms-Protokoll

Abfragen des Indexes mit der SQL-Syntax von Windows Search

Programmgesteuertes Verwenden der erweiterten Abfragesyntax