Interrogation de l’index avec ISearchQueryHelper
Vous pouvez utiliser l’interface ISearchQueryHelper pour interroger l’index. Cette interface est implémentée en tant que classe d’assistance pour ISearchCatalogManager (et ISearchCatalogManager2), et est obtenue en appelant ISearchCatalogManager :: GetQueryHelper. Cette interface vous permet d’effectuer les opérations suivantes :
- obtenez une chaîne de connexion OLE DB pour vous connecter à la base de données de recherche Windows.
- convertit les requêtes utilisateur AQS (Advanced Query Syntax) en langage SQL de recherche Windows (SQL).
- spécifiez les restrictions de requête qui peuvent être exprimées en SQL, mais pas dans AQS.
Cette rubrique est organisée comme suit :
- Prise en main avec ISearchQueryHelper
- Utilisation de la méthode GenerateSqlFromUserQuery
- Utilisation des identificateurs de paramètres régionaux
- Utilisation des propriétés et des colonnes
- Utilisation de l’expansion de terme de requête
- Utilisation d’autres méthodes ISearchQueryHelper
- Rubriques connexes
Prise en main avec ISearchQueryHelper
il existe quelques méthodes et interfaces clés que vous devez connaître avant de commencer à interroger par programmation Windows la recherche à l’aide de l’interface ISearchQueryHelper . À un niveau élevé, vous devez suivre les étapes suivantes :
Instanciez une instance ISearchManager .
// Create ISearchManager instance ISearchManager* pSearchManager; // Use library SearchSDK.lib for CLSID_CSearchManager. hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));Obtenez une instance de ISearchCatalogManager à l’aide de ISearchManager :: getCatalog,. le nom du catalogue système pour la recherche de Windows est
SYSTEMINDEX.// Create ISearchCatalogManager instance ISearchCatalogManager* pSearchCatalogManager; // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);Obtenez une instance de ISearchQueryHelper à l’aide de ISearchCatalogManager :: GetQueryHelper.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);une fois que vous disposez d’une instance de ISearchQueryHelper, vous pouvez obtenir la chaîne de connexion utilisée pour se connecter à l’index de recherche Windows OLE DB connecteur.
// 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
Utilisation de la méthode GenerateSqlFromUserQuery
la méthode ISearchQueryHelper :: GenerateSQLFromUserQuery transforme l’entrée d’utilisateur en une chaîne de requête SQL, qui peut ensuite être envoyée au fournisseur OLE DB pour la recherche Windows. cette méthode traduit la requête de syntaxe de requête avancée (AQS) ou la syntaxe de requête naturelle (NQS) entrée par l’utilisateur en SQL, et vous permet d’ajouter d’autres fragments de SQL en fonction des besoins.
la chaîne de requête SQL est retournée sous la forme suivante :
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> ]
voici un exemple de la chaîne de SQL retournée à partir de l’appel 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"
Notes
La méthode génère les prédicats FREETEXT et CONTAINs, car CONTAINs seul ne génère pas de classement significatif.
Utilisation des identificateurs de paramètres régionaux
| Méthode | Description |
|---|---|
| ISearchQueryHelper :: obtient _ QueryContentLocale/ ISearchQueryHelper ::p ut _ QueryContentLocale |
Obtient/place l’identificateur LCID (Language code identifier) de la requête. Cela permet d’obtenir le séparateur de mots et le biais corrects pour comparer les termes de requête à l’index catalogue/inversé. La valeur par défaut est le paramètre régional d’entrée actuel. |
| ISearchQueryHelper :: obtient _ QueryKeywordLocale/ ISearchQueryHelper ::p ut _ QueryKeywordLocale |
Obtient/place le LCID de la langue à utiliser lors de l’analyse des mots clés de la syntaxe de requête avancée (AQS). La valeur par défaut est la valeur par défaut des paramètres régionaux utilisateur. |
Les paramètres régionaux de contenu et les Mots clés régionaux sont des identificateurs de paramètres régionaux (LCID) qui aident le moteur de recherche à utiliser les analyseurs lexicaux appropriés en identifiant la langue des termes de la requête et la langue des mots clés AQS. ce ne sont pas toujours les mêmes lcid, car Windows recherche est disponible dans plusieurs versions internationales et comprend également des packs d’interface utilisateur multilingue (MUI) pour un plus grand nombre de langues. Les paramètres régionaux de contenu identifient le LCID pour les utilisateurs de langue qui saisissent leur requête de recherche dans, tandis que le mot clé local identifie le LCID utilisé par le moteur de recherche lors de l’analyse des mots clés de la syntaxe de requête avancée (AQS).
Par exemple, si vous disposez de la version anglaise (États-Unis) sans packs MUI, les paramètres régionaux de contenu et les paramètres régionaux de mot clé sont 1033. Si vous disposez de la version allemande sans packs MUI, les paramètres régionaux de contenu et les paramètres régionaux de mot-clé sont 1031 (GR-gr). Toutefois, si vous disposez de la version anglaise avec le Pack MUI roumain, les paramètres régionaux de contenu sont 2072 (RO) et les mots clés régionaux sont 1033 (en-US).
Utilisation des propriétés et des colonnes
| Méthodes | Description |
|---|---|
| ISearchQueryHelper :: obtient _ QueryContentProperties/ ISearchQueryHelper ::p ut _ QueryContentProperties |
Obtient/définit les propriétés de contenu pour la recherche (colonne de propriété figurant dans les clauses CONTAINs ou FREETEXT). |
| ISearchQueryHelper :: obtient _ QuerySelectColumns/ ISearchQueryHelper ::p ut _ QuerySelectColumns |
Obtient/définit les colonnes (ou propriétés) demandées dans l’instruction SELECT. La valeur par défaut est System. ItemUrl et les propriétés utilisées dans la clause WHERE. |
Les éléments sont représentés dans le magasin de propriétés sous la forme d’une ligne. Chaque ligne contient plusieurs colonnes qui représentent les propriétés de cet élément. Tous les éléments n’ont pas de valeur pour une propriété donnée. Par exemple, un fichier audio ne contient généralement pas de valeur pour la propriété System. Property. FromName, mais il peut contenir des informations relatives au système. Musique. Peinture.
Avec ces méthodes, vous accédez ou modifiez la propriété avec une chaîne Unicode délimitée par des virgules, se terminant par un caractère null, qui spécifie un ou plusieurs noms de colonnes de la Banque de propriétés : « System. document. Author, System. document. title ».
Utilisation de l’expansion de terme de requête
| Méthodes | Description |
|---|---|
| ISearchQueryHelper :: obtient _ QueryTermExpansion ISearchQueryHelper ::p ut _ QueryTermExpansion |
Obtient/définit l’indicateur de développement de terme de recherche. |
Cette méthode permet d’étendre certains termes de requête avec des caractères génériques, similaires à l’expansion d’expressions régulières. L’expansion de préfixe recherche des mots avec le même préfixe (fun/entonnoir). Si la valeur n’est pas définie, la valeur par défaut est le _ préfixe de terme de recherche _ _ . Les valeurs prises en charge pour l’énumération de l' _ _ expansion des termes recherchés sont les suivantes :
- Rechercher _ _ le préfixe du terme _ tous-tous les termes de recherche sont développés
- _Terme _ de recherche sans _ expansion-aucun terme de recherche n’est développé
Utilisation d’autres méthodes ISearchQueryHelper
La plupart des méthodes de l’interface ISearchQueryHelper sont utilisées pour définir des arguments de requête ou définir les propriétés retournées.
| Méthodes | Description |
|---|---|
| ISearchQueryHelper :: obtient _ ConnectionString |
Retourne la chaîne de connexion OLE DB. Il s’agit de la méthode recommandée pour obtenir une chaîne de connexion correctement mise en forme et correcte. |
| ISearchQueryHelper :: obtient _ QueryMaxResults ISearchQueryHelper ::p ut _ QueryMaxResults |
Obtient/définit le nombre maximal de résultats qui doivent être retournés par une requête (autrement dit, sélectionnez TOP n). La valeur par défaut est-1, ce qui signifie qu’aucune clause de résultats maximale n’est générée. |
| ISearchQueryHelper :: obtient _ QuerySorting ISearchQueryHelper ::p ut _ QuerySorting |
Obtient/définit l’ordre de tri du jeu de résultats de la requête (ORDER BY). S’il n’existe aucune clause ORDER BY, les résultats sont retournés dans un ordre non déterministe. |
| ISearchQueryHelper :: obtient _ QuerySyntax ISearchQueryHelper ::p ut _ QuerySyntax |
Obtient/définit la syntaxe de la requête : la syntaxe de requête avancée ou la syntaxe de requête naturelle. |
| ISearchQueryHelper :: obtient _ QueryWhereRestrictions ISearchQueryHelper ::p ut _ QueryWhereRestrictions |
Obtient/définit les restrictions ajoutées à l’aide des clauses WHERE. |