Freigeben über


Abfragevorgang in der Windows-Suche

Dieses Thema ist wie folgt organisiert:

Die Abfrage in Windows Search basiert auf den folgenden vier Ansätzen:

  • Erweiterte Abfragesyntax (AQS)
  • Natürliche Abfragesyntax (NQS)
  • Strukturierte Abfragesprache (SQL)
  • Strukturierte Abfrageschnittstellen

AQS ist die standardmäßige Abfragesyntax, die von Windows Search zum Abfragen des Indexes und zum Verfeinern und Einschränken von Suchparametern verwendet wird. AQS ist in erster Linie benutzerseitig zugänglich und kann von Benutzern zum Erstellen von AQS-Abfragen verwendet werden, kann aber auch von Entwicklern verwendet werden, um Abfragen programmgesteuert zu erstellen. In Windows 7 wurde das kanonische AQS eingeführt und muss zum programmgesteuerten Generieren von AQS-Abfragen verwendet werden. In Windows 7 und höher kann eine Kontextmenüoption verfügbar sein, je nachdem, ob eine AQS-Bedingung erfüllt ist. Weitere Informationen finden Sie unter "Dynamisches Verhalten für statische Verben durch erweiterte Abfragesyntax erhalten" in Creating Context Menu Handlers. AQS-Abfragen können auf bestimmte Dateitypen beschränkt werden, die als Dateitypen bezeichnet werden. Weitere Informationen finden Sie unter "Dateitypen und Zuordnungen". Referenzdokumentation zu den relevanten Eigenschaften finden Sie unter "System.Kind" und "System.KindText".

NQS ist eine Abfragesyntax, die entspannter ist als AQS und ähnelt der menschlichen Sprache. NQS kann von Windows Search verwendet werden, um den Index abzufragen, wenn NQS anstelle der Standardeinstellung AQS ausgewählt ist.

SQL ist eine Textsprache, die Abfragen definiert. SQL ist in vielen verschiedenen Datenbanktechnologien üblich. Windows Search verwendet SQL, implementiert eine Teilmenge davon und erweitert sie durch Hinzufügen von Elementen zur Sprache. Windows Search SQL erweitert die standardmäßige SQL-92- und SQL-99-Datenbankabfragesyntax, um ihre Nützlichkeit bei textbasierten Suchvorgängen zu verbessern. Alle Features von Windows Search SQL sind mit windows Search unter Windows XP und Windows Server 2003 und höher kompatibel. Weitere Informationen zu Windows Search SQL finden Sie unter Abfragen des Indexes mit Windows Search SQL-Syntax und Übersicht über die SQL-Syntax von Windows Search.

Die strukturierten Abfrage-APIs werden weiter unten in diesem Thema beschrieben. Referenzdokumentation zu den strukturierten Abfrage-APIs finden Sie unter Abfrageschnittstellen. Schnittstellen wie ISearchQueryHelper helfen beim Erstellen von SQL-Zeichenfolgen aus einer Reihe von Eingabewerten. Diese Schnittstelle konvertiert AQS-Benutzerabfragen in Windows Search SQL und gibt Abfrageeinschränkungen an, die in SQL, aber nicht in AQS ausgedrückt werden können. ISearchQueryHelper ruft auch eine OLE DB-Verbindungszeichenfolge ab, um eine Verbindung mit der Windows Search-Datenbank herzustellen.

Lokale und Remoteabfragen

Sie können Ihre Abfragen entweder lokal oder remote ausführen. Im folgenden Beispiel wird eine lokale Abfrage mit der FROM-Klausel gezeigt. Eine lokale Abfrage fragt nur den lokalen SystemIndex-Katalog ab.

FROM SystemIndex

Eine Remoteabfrage mit der FROM-Klausel wird im folgenden Beispiel gezeigt. Durch Hinzufügen von ComputerName wird das vorherige Beispiel in eine Remoteabfrage umgewandelt.

FROM [<ComputerName>.]SystemIndex

Standardmäßig ist Windows Search bei Windows XP und Windows Server 2003 nicht installiert. Nur Windows Search 4 (WS4) bietet Remoteabfrageunterstützung. Frühere Versionen von Windows Desktop Search (WDS), z. B. 3.01 und früher, unterstützen die Remoteabfrage nicht. Mit Dem Windows-Explorer können Sie den lokalen Index eines Remotecomputers nach Dateisystemelementen abfragen (Elemente, die vom Protokoll "file:" behandelt werden).

Um ein Element nach Remoteabfrage abzurufen, muss das Element die folgenden Anforderungen erfüllen:

  • Erreichbar sein über den UNC-Pfad (Universal Naming Convention).
  • Auf dem Remotecomputer vorhanden, auf den der Client Zugriff hat.
  • Die Sicherheitseinstellungen müssen so konfiguriert sein, dass der Client Lesezugriff hat.

Windows Explorer verfügt über Features zum Freigeben von Elementen, einschließlich einer "Öffentlichen" Freigabe (\\Machine\Public\...) im Netzwerk- und Freigabecenter und einer "Benutzer"-Freigabe (\\Computer\Benutzer\...) für Elemente, die über den Freigabe-Assistenten freigegeben wurden. Nachdem Sie die Ordner freigegeben haben, können Sie den lokalen Index abfragen, indem Sie den Computernamen des Remotecomputers in der FROM-Klausel und einen UNC-Pfad auf dem Remotecomputer in der SCOPE-Klausel angeben. Eine Remoteabfrage mit den FROM- und SCOPE-Klauseln wird im folgenden Beispiel gezeigt.

SELECT System.ItemName FROM MachineName.SystemIndex WHERE SCOPE='file://MachineName/<path>' 

Die hier bereitgestellten Beispiele verwenden SQL.

Übersicht über die strukturierte Abfrage-API

Eine strukturierte Abfrage bietet die Möglichkeit, nach Informationen durch boolesche Kombinationen von Abfragen über einzelne Eigenschaften zu suchen. In diesem Thema erläutern wir die Funktionalität der wichtigsten strukturierten Abfrage-APIs und -Methoden. Referenzdokumentation zu den strukturierten Abfrage-APIs finden Sie unter Abfrageschnittstellen.

IQueryParser

Die IQueryParser::P arse-Methode analysiert eine Benutzereingabezeichenfolge und erzeugt eine Interpretation in Form einer IQuerySolution. Wenn der Parameter "pCustomProperties " dieser Methode nicht null ist, handelt es sich um eine Aufzählung von IRichChunk-Objekten (eine für jede erkannte benutzerdefinierte Eigenschaft). Mit den anderen IQueryParser-Methoden kann die Anwendung mehrere Optionen festlegen, z. B. Gebietsschema, Schema, Wörtertrennung und Handler für verschiedene Typen benannter Entitäten. IQueryParser::GetSchemaProvider gibt eine ISchemaProvider-Schnittstelle zum Durchsuchen des geladenen Schemas zurück.

IQuerySolution : IConditionFactory

Die IQuerySolution-Schnittstelle stellt alle Informationen zum Ergebnis der Analyse einer Eingabezeichenfolge bereit. Da IQuerySolution auch eine IConditionFactory-Schnittstelle ist, können zusätzliche Bedingungsstrukturknoten erstellt werden. Die IQuerySolution::GetQuery-Methode erzeugt eine Bedingungsstruktur für die Interpretation. IQuerySolution::GetQuery gibt auch den semantischen Typ zurück.

IConditionFactory

IConditionFactory erstellt Bedingungsstrukturknoten. Wenn der vereinfachungsparameter von IConditionFactory::MakeNotVARIANT_TRUE ist, wird die resultierende ICondition vereinfacht und muss kein Negationsknoten sein. Wenn der Parameter "pSubConditions " von "IConditionFactory::MakeAndOr " nicht null ist, sollte dieser Parameter eine Enumeration von ICondition-Objekten sein und zu Unterstrukturen werden. IConditionFactory::MakeLeaf erstellt einen Blattknoten mit einem angegebenen Eigenschaftennamen, -vorgang und -wert. Die Zeichenfolge im Parameter "pValueType " sollte der Name eines semantischen Typs aus dem Schema sein. Wenn der ErweiterungsparameterVARIANT_TRUE ist und die Eigenschaft virtuell ist, ist die resultierende Bedingungsstruktur in der Regel eine Disjunktion, die sich aus dem Erweitern der Eigenschaft auf die definierten Bestandteile ergibt. Wenn nicht NULL, sollten die Parameter "pPropertyNameTerm", "pOperatorTerm" und "pValueTerm " Ausdrücke identifizieren, die die Eigenschaft, den Vorgang und den Wert angeben.

ICondition : IPersistStream

Die ICondition-Schnittstelle ist ein einzelner Knoten in einer Bedingungsstruktur. Der Knoten kann ein Negationsknoten, AND-Knoten, ODER-Knoten oder ein Blattknoten sein. Für einen nicht blattfreien Knoten gibt ICondition::GetSubConditions eine Aufzählung der Unterstrukturen zurück. Für einen Blattknoten geben die folgenden Methoden von ICondition die folgenden Werte zurück:

  • GetComparisonInfo gibt den Eigenschaftsnamen, den Vorgang und den Wert zurück.
  • GetValueType gibt den semantischen Typ des Werts zurück, der im pszValueType-Parameter von IConditionFactory::MakeLeaf angegeben wurde.
  • GetValueNormalization gibt eine Zeichenfolgenform des Werts zurück. (Wenn der Wert bereits eine Zeichenfolge war, wird dieses Formular in Bezug auf Groß-/Kleinschreibung, Akzente usw. normalisiert.)
  • GetInputTerms gibt Informationen darüber zurück, welche Teile des Eingabesatzes den Eigenschaftennamen, den Vorgang und den Wert generiert haben.
  • Clone gibt eine tiefgehende Kopie einer Bedingungsstruktur zurück.

IRichChunk

Jedes IRichChunk - Objekt identifiziert eine Tokenspanne und eine Zeichenfolge. IRichChunk ist eine Hilfsschnittstelle, die Informationen zu einer Spanne (in der Regel eine Spanne von Token) darstellt, die durch eine Startposition und Länge identifiziert wird. Diese Span-Informationen umfassen eine Zeichenfolge und/oder eine VARIANT.

IConditionGenerator

Die IConditionGenerator-Schnittstelle wird von der Anwendung bereitgestellt, um die Erkennungs- und Bedingungsstrukturgenerierung für einen benannten Entitätstyp zu behandeln. Ein Bedingungsgenerator wird einem IQueryParser über IQueryParser::SetMultiOption übergeben. IQueryParser ruft IConditionGenerator::Initialize mit einem ISchemaProvider für das aktuell geladene Schema auf. Dadurch kann IConditionGenerator alle erforderlichen Schemainformationen abrufen. Beim Analysieren einer Eingabezeichenfolge ruft IQueryParser die IConditionGenerator::RecognizeNamedEntities-Methode der einzelnen IConditionGenerators auf, sodass das Vorkommen benannter Entitäten, die in der Eingabezeichenfolge erkannt werden, gemeldet werden kann. IQueryParser kann das aktuelle Gebietsschema verwenden und sollte die Tokenisierung der Eingabe verwenden, da sie die Tokenspanne aller benannten Entitäten melden muss.

Wenn IQueryParser einen Blattknoten ausgibt und der semantische Typ des Werts dem benannten Entitätstyp für einen IConditionGenerator entspricht, ruft IQueryParserIConditionGenerator::GenerateforLeaf mit den Informationen für den zu generierenden Knoten auf. Wenn der IConditionGenerator S_OK zurückgibt, sollte ein Bedingungsbaum zurückgegeben werden (der kein Blattknoten sein muss), und IQueryParser darüber informieren, ob die alternative Interpretation der Zeichenfolge unterdrückt werden soll, die normalerweise als Vorsichtsmaßnahme generiert würde.

ITokenCollection

Die ITokenCollection::NumberOfTokens-Methode gibt die Anzahl der Token zurück. ITokenCollection::GetToken gibt Informationen zum i-th-Token zurück. Der Anfang und die Länge sind Zeichenpositionen in der Eingabezeichenfolge. Der zurückgegebene Text ist nicht null, nur dann, wenn ein Text die Zeichen aus der Eingabezeichenfolge überschreibt. Dies wird beispielsweise verwendet, um einen Gedankenstrich in der Eingabezeichenfolge mit NOT außer Kraft zu setzen, wenn sich dieser Gedankenstrich in einem Kontext befindet, in dem er als Negation interpretiert werden soll.

INamedEntityCollector

IConditionGenerator ruft INamedEntityCollector::Add für jede benannte Entität auf, die erkannt wurde. Die Spanne sind Tokenspannen. Es muss immer so sein, dass beginSpan ? beginActual<endActual ? endSpan. "beginSpan " und "endSpan " können sich von "beginActual " und " endActual " unterscheiden, wenn die benannte Entität beginnt und/oder mit semantisch unbedeutenden Token wie Anführungszeichen endet (die jedoch von der benannten Entität abgedeckt werden). Der Wert muss als Zeichenfolge ausgedrückt werden und wird anschließend in einem Aufruf von IConditionGenerator::GenerateForLeaf angezeigt.

ISchemaProvider

Die ISchemaProvider-Schnittstelle kann zum Durchsuchen eines geladenen Schemas für Entitäten (Typen) und Beziehungen (Eigenschaften) verwendet werden. Hier erfahren Sie, was einzelne Methoden tun:

IEntity

Die IEntity-Schnittstelle ist eine Schemaentität, die einen Typ mit einem Namen darstellt, eine Reihe benannter Beziehungen zu anderen Typen (Eigenschaften) aufweist und von einer Basisentität abgeleitet wird. Hier erfahren Sie, was die einzelnen Methoden tun:

IRelationship

Die IRelationship-Schnittstelle stellt eine Beziehung zwischen zwei Entitäten dar: eine Quelle und ein Ziel. Hier erfahren Sie, was einzelne Methoden tun:

  • IRelationship::IsReal berichtet, ob eine Beziehung real ist. Wenn z. B. die Entität A von der Entität B abgeleitet wird und eine Beziehung namens R erbt, kann A möglicherweise eine eigene Beziehung namens R haben. Die Beziehung zwischen A und R muss jedoch denselben Zieltyp wie die von B haben, und der einzige Grund für ihre Existenz ist, metadaten zu speichern, die spezifisch für A und von B abgeleitet sind. Eine solche Beziehung von B wird als nicht real angesehen.
  • IRelationship::Medadata gibt eine Enumeration von IMetaData-Schnittstellen zurück, eines für jedes Metadatenpaar dieser Entität.
  • IRelationship::DefaultPhrase gibt den Standardausdruck zurück, der für diese Beziehung in Restatements verwendet werden soll. Jede Beziehung weist einen Standardausdruck auf, der sie angibt, um das Generieren einer AQS- oder NQS-Neudarstellung eines Bedingungsbaums zu erleichtern.

IMetaData

Metadaten sind Schlüsselwertpaare, die jeweils einer Entität, einer Beziehung oder dem gesamten Schema zugeordnet sind. Da Schlüssel nicht notwendigerweise eindeutig sind, kann eine Sammlung von Metadaten als multimap betrachtet werden. IMetaData::GetData wird aufgerufen, um den Schlüssel und Wert für ein Metatdata-Paar abzurufen.

Abfrageszenarien

In den folgenden Szenarien wird die Verwendung von strukturierten Abfrage-APIs in der Windows-Suche in gängigen Abfrageszenarien beschrieben, z. B. erstellen einer Bedingungsstruktur und Abfragen des Indexes.

Bedingungsextraktion und Abfrageanalyse

Wenn eine Abfrage erstellt wird, wird ihr Bereich definiert, indem dem System mitgeteilt wird, wo gesucht werden soll. Dadurch werden die Suchergebnisse eingeschränkt. Nachdem der Bereich definiert wurde, wird ein Filter angewendet, und ein Filtersatz wird zurückgegeben. Suchergebnisse werden durch erstellen einer Bedingungsstruktur mit Blattknoten, ähnlich einem Diagramm, eingeschränkt. Diese Bedingungen werden dann extrahiert. Ein Bedingungsbaum ist eine boolesche Kombination (UND, ODER, NICHT) von Blattbedingungen, von denen jede eine Eigenschaft durch einen Operator auf einen Wert bezieht. Ein Blattknoten stellt eine Einschränkung einer einzelnen Eigenschaft auf einen Wert durch bestimmte Operationen dar.

Eine Filtereinschränkung erfordert einen logischen Ausdruck, der die Einschränkung beschreibt. Das Definieren dieses Ausdrucks beginnt mit der ICondition-Schnittstelle , die zum Erstellen eines einzelnen Knotens in einer Bedingungsstruktur verwendet wird. Da im folgenden Beispiel nur eine Bedingung vorhanden ist, ändert sich die Baumstruktur nicht.

    
    [
        object,
        uuid(0FC988D4-C935-4b97-A973-46282EA175C8),
        pointer_default(unique)
    ]
    interface ICondition : IPersistStream
    {
        HRESULT GetConditionType([out, retval] CONDITION_TYPE* pNodeType);
        HRESULT GetSubConditions([in] REFIID riid, [out, retval, iid_is(riid)] void** ppv);
        [local] HRESULT GetComparisonInfo([out, annotation("__deref_opt_out")] LPWSTR *ppszPropertyName, [out, annotation("__out_opt")] CONDITION_OPERATION *pOperation, [out, annotation("__out_opt")] PROPVARIANT *pValue);
        HRESULT GetValueType([out, retval] LPWSTR* ppszValueTypeName);
        HRESULT GetValueNormalization([out, retval] LPWSTR* ppszNormalization);
        [local] HRESULT GetInputTerms([out, annotation("__out_opt")] IRichChunk** ppPropertyTerm, [out, annotation("__out_opt")] IRichChunk** ppOperationTerm, [out, annotation("__out_opt")] IRichChunk** ppValueTerm);
        HRESULT Clone([out, retval] ICondition** ppc);
    };


Wenn mehrere Filterbedingungen vorhanden sind, werden AND und andere boolesche Operatoren verwendet, um eine einzelne Struktur zu erhalten. AND-Bäume und OR-Bäume stellen Konjunktionen und Disjunktionen ihrer Unterstrukturen dar. Ein NOT-Baum stellt die Negation seines einzelnen Teilbaums dar. AQS bietet einen Textansatz zum Erreichen logischer Ausdrücke mit booleschen Operatoren und ist häufig einfacher.

Im nächsten Beispiel konvertieren wir die Bedingungsstruktur (ICondition) in visuelle Form. Der Abfrageparser konvertiert die ICondition mithilfe der IQueryParser-Schnittstelle in eine RTF-Abfragezeichenfolge (Rich Text formatted). Die IQueryParser::RestateToString-Methode gibt den Abfragetext zurück, während die IQueryParser::P arse-Methode eine IQuerySolution-Schnittstelle erzeugt. Im folgenden Beispiel wird gezeigt, wie Sie all dies tun.

    [
        object,
        uuid(2EBDEE67-3505-43f8-9946-EA44ABC8E5B0),
        pointer_default(unique)
    ]
    interface IQueryParser : IUnknown
    {
        HRESULT Parse([in] LPCWSTR pszInputString, [in] IEnumUnknown* pCustomProperties, [out, retval] IQuerySolution** ppSolution);
        HRESULT SetOption([in] STRUCTURED_QUERY_SINGLE_OPTION option, [in] PROPVARIANT const* pOptionValue);
        HRESULT GetOption([in] STRUCTURED_QUERY_SINGLE_OPTION option, [out, retval] PROPVARIANT* pOptionValue);
        HRESULT SetMultiOption([in] STRUCTURED_QUERY_MULTIOPTION option, [in] LPCWSTR pszOptionKey, [in] PROPVARIANT const* pOptionValue);
        HRESULT GetSchemaProvider([out, retval] ISchemaProvider** ppSchemaProvider);
        HRESULT RestateToString([in] ICondition* pCondition, [in] BOOL fUseEnglish, [out] LPWSTR* ppszQueryString);
        HRESULT ParsePropertyValue([in] LPCWSTR pszPropertyName, [in] LPCWSTR pszInputString, [out, retval] IQuerySolution** ppSolution);
        HRESULT RestatePropertyValueToString([in] ICondition* pCondition, [in] BOOL fUseEnglish, [out] LPWSTR* ppszPropertyName, [out] LPWSTR* ppszQueryString);
    };

Die Haupteingabe von IQueryParser::P arse ist eine Benutzereingabezeichenfolge, die analysiert werden soll. Die Anwendung kann jedoch auch den Abfrageparser über alle Eigenschaften informieren, die in der Eingabe erkannt wurden (aus anwendungsspezifischer Syntax). Die Ausgabe von IQueryParser::Parse ist eine IQuerySolution, die alle Informationen zu dieser Analyse bereitstellt. Es gibt Methoden zum Abrufen der Eingabezeichenfolge, wie die Eingabezeichenfolge tokenisiert wurde, alle Analysefehler und die analysierte Abfrage als Bedingungsstruktur, dargestellt durch eine ICondition. Das folgende Beispiel zeigt ...

    [
        object,
        uuid(D6EBC66B-8921-4193-AFDD-A1789FB7FF57),
        pointer_default(unique)
    ]
    interface IQuerySolution : IConditionFactory
    {
        [local] HRESULT GetQuery([out, annotation("__out_opt")] ICondition** ppQueryNode, [out, annotation("__out_opt")] IEntity** ppMainType);
        HRESULT GetErrors([in] REFIID riid, [out, retval, iid_is(riid)] void** ppParseErrors);
        [local] HRESULT GetLexicalData([out, annotation("__deref_opt_out")] LPWSTR* ppszInputString, [out, annotation("__out_opt")] ITokenCollection** ppTokens, [out, annotation("__out_opt")] LCID* pLocale, [out, annotation("__out_opt")] IUnknown** ppWordBreaker);
    }    

    

Im vorherigen Beispiel konnte IQuerySolution::GetQuery alle Informationen zur Abfrage abrufen, einschließlich des ursprünglichen Texts, token, die den Text oder die Bedingungsstruktur umfassen. Beispiele für mögliche zurückgegebene Abfragewerte sind in der folgenden Tabelle aufgeführt.

Beispiele für zurückgegebene Abfragewerte BESCHREIBUNG
author:relja OR author:tyler Der Abfragetext, den IQueryParser::RestateToString zurückgibt
?author?, ?:?, ?relja?, ?OR?, ?author?, ?:?, ?tyler? Die Aufschlüsselung von Token
eine nicht aufgelöste Bedingungsstruktur Eine nicht aufgelöste Bedingungsstruktur

 

Die zurückgegebene Anfangsbedingungsstruktur, oder Baumstruktur, ist noch nicht gelöst. In einer nicht aufgelösten Bedingungsstruktur werden Datums- und Uhrzeitbezüge, wie z. B. date:yesterday, nicht in absolute Zeit konvertiert. Außerdem werden virtuelle Eigenschaften nicht erweitert. Virtuelle Eigenschaften sind Eigenschaften, die als Aggregate mehrerer Eigenschaften fungieren.

Beispielsweise erzeugt die Abfrage kind:email from:reljai die folgenden nicht aufgelösten und aufgelösten Bedingungsstrukturen. Die nicht aufgelöste Bedingungsstruktur befindet sich links, und die aufgelöste Bedingungsstruktur ist rechts.

ungelöste und gelöste Bedingungsbäume

Der aufgelöste Baum kann abgerufen werden, indem Sie IConditionFactory::Resolve aufrufen. Wenn Sie jedoch SQRO_DONT_RESOLVE_DATETIME übergeben, bleiben das Datum und die Uhrzeit ungelöst. Es gibt Vorteile einer nicht aufgelösten Bedingungsstruktur, da eine nicht aufgelöste Bedingungsstruktur Informationen zur Abfrage enthält. Jeder Blattknoten verweist auf die von IQuerySolution::GetLexicalData zurückgegebenen Token, die der Eigenschaft, dem Operator und dem Wert entsprechen, wenn die IRichChunk-Schnittstelle verwendet wird. Das folgende Beispiel zeigt ...

    interface ITokenCollection : IUnknown
    {
        HRESULT NumberOfTokens(ULONG* pCount);
        HRESULT GetToken([in] ULONG i, [out, annotation("__out_opt")] ULONG* pBegin, [out, annotation("__out_opt")] ULONG* pLength, [out, annotation("__deref_opt_out")] LPWSTR* ppsz);
    };

ICondition:: GetInputTerms([out, annotation("__out_opt")] 
IRichChunk** ppPropertyTerm, [out, annotation("__out_opt")] 
IRichChunk** ppOperationTerm, [out, annotation("__out_opt")] 
IRichChunk** ppValueTerm);

    interface IRichChunk : IUnknown
    {
        HRESULT GetData([out, annotation("__out_opt")] ULONG* pFirstPos, [out, annotation("__out_opt")] ULONG* pLength, [out, annotation("__deref_opt_out")] LPWSTR* ppsz, [out, annotation("__out_opt")] PROPVARIANT* pValue);
    }

Abfragen des Indexes

Es gibt mehrere Ansätze zum Abfragen des Indexes. Einige basieren auf SQL und anderen basieren auf AQS. Sie können den Windows Search-Index auch programmgesteuert abfragen, indem Sie Abfrageschnittstellen verwenden. Es gibt drei Schnittstellen, die für die Abfrage des Indexes spezifisch sind: ISearchQueryHelper, IRowsetPrioritization und IRowsetEvents. Konzeptionelle Informationen finden Sie unter Programmgesteuertes Abfragen des Indexes.

Sie können eine Komponente oder Hilfsklasse entwickeln, um den Index mithilfe der ISearchQueryHelper-Schnittstelle abzufragen . Diese Schnittstelle wird als Hilfsklasse für ISearchCatalogManager (und ISearchCatalogManager2) implementiert und wird durch Aufrufen von ISearchCatalogManager::GetQueryHelper abgerufen. Konzeptionelle Informationen finden Sie unter Abfragen des Indexes mit ISearchQueryHelper.

ISearchQueryHelper ermöglicht Folgendes:

  • Rufen Sie eine OLE DB-Verbindungszeichenfolge ab, um eine Verbindung mit der Windows Search-Datenbank herzustellen.
  • Konvertieren von AQS-Benutzerabfragen in Windows Search SQL.
  • Geben Sie Abfrageeinschränkungen an, die in SQL, aber nicht in AQS ausgedrückt werden können.

Indizierungspriorisierungs- und Rowset-Ereignisse werden in Windows 7 und höher unterstützt. Bei der IRowsetPrioritization gibt es einen Prioritätsstapel, mit dem der Client anfordern kann, dass die in einer bestimmten Abfrage verwendeten Bereiche höher als die normale Priorität angegeben werden. IRowsetEvents stellt Benachrichtigungen über Änderungen an Elementen in Rowsets bereit, einschließlich des Hinzufügens neuer Elemente, des Löschens von Elementen und der Änderung von Elementdaten. Die Verwendung von Rowset-Ereignisbenachrichtigungen stellt sicher, dass die Ergebnisse für vorhandene Abfragen so aktuell wie möglich sind. Konzeptionelle Informationen finden Sie unter Indexing Prioritization and Rowset Events in Windows 7.

Indizierung, Abfrage und Benachrichtigungen in Windows Search

Was im Index- enthalten ist

Indizierungsprozess in Windows Search

Benachrichtigungsprozess in der Windows-Suche

URL-Formatierungsanforderungen