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 de :

  • Obtenez une chaîne de connexion OLE DB pour vous connecter à la base de données Windows Search.
  • Convertir des requêtes utilisateur AQS (Advanced Query Syntax) en Windows Search langage SQL (SQL).
  • Spécifiez les restrictions de requête qui peuvent être exprimées dans SQL, mais pas dans AQS.

Cette rubrique est organisée comme suit :

Prise en main avec ISearchQueryHelper

Il existe quelques interfaces et méthodes clés que vous devez connaître avant de pouvoir commencer à interroger Windows Search par programmation à l’aide de l’interface ISearchQueryHelper . À un niveau élevé, vous devez suivre les étapes suivantes :

  1. Instanciez un 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));      
    
  2. Obtenez une instance de ISearchCatalogManager à l’aide de ISearchManager::GetCatalog. Le nom du catalogue système pour Windows Search 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);
    
    
  3. Obtenez un instance de ISearchQueryHelper à l’aide de ISearchCatalogManager::GetQueryHelper.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. Une fois que vous avez une instance de ISearchQueryHelper, vous pouvez obtenir la chaîne de connexion utilisée pour vous connecter au connecteur OLE DB de l’index Windows Search.

    // 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 utilisateur en chaîne de requête SQL, qui peut ensuite être envoyée au fournisseur OLE DB pour Windows Search. Cette méthode traduit la requête AQS ( Advanced Query Syntax ) ou NQS (Natural Query Syntax) entrée par l’utilisateur en SQL et vous permet d’ajouter d’autres fragments SQL si nécessaire.

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 chaîne 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 à la fois 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::get_QueryContentLocale/
ISearchQueryHelper::p ut_QueryContentLocale
Obtient/place l’identificateur de code de langue (LCID) de la requête. Cela permet d’obtenir le séparateur de mots et le générateur de formes dérivées appropriés pour comparer les termes de requête à l’index catalogue/inversé. La valeur par défaut est les paramètres régionaux d’entrée actuels.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::p ut_QueryKeywordLocale
Obtient/place le LCID pour le langage à utiliser lors de l’analyse des mots clés AQS (Advanced Query Syntax). La valeur par défaut est les paramètres régionaux utilisateur par défaut.

 

Les paramètres régionaux de contenu et les paramètres régionaux mot clé sont des identificateurs de paramètres régionaux (LCID) qui aident le moteur de recherche à utiliser les analyseurs lexicaux corrects en identifiant la langue des termes de la requête et la langue des mots clés AQS. Il ne s’agit pas toujours des mêmes LCID, car Recherche Windows est proposé dans un certain nombre de versions internationales et inclut également des packs d’interface utilisateur multilingue (MUI) pour d’autres langues. Les paramètres régionaux de contenu identifient le LCID pour la langue dans laquelle les utilisateurs entrent leur requête de recherche, tandis que les paramètres régionaux mot clé identifient le LCID utilisé par le moteur de recherche lors de l’analyse des mots clés AQS (Advanced Query Syntax).

Par exemple, si vous avez la version Anglais-États-Unis sans packs MUI, les paramètres régionaux de contenu et les paramètres régionaux mot clé sont 1033. Si vous avez la version allemande sans packs MUI, les paramètres régionaux de contenu et les paramètres régionaux mot clé sont 1031 (gr-gr). Toutefois, si vous disposez de la version anglaise avec le pack roumain MUI, les paramètres régionaux de contenu sont 2072 (ro) et les paramètres régionaux mot clé sont 1033 (en-us).

Utilisation des propriétés et des colonnes

Méthodes Description
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::p ut_QueryContentProperties
Obtient/définit les propriétés de contenu de la recherche (colonne de propriété répertoriée dans les clauses CONTAINS ou FREETEXT).
ISearchQueryHelper::get_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 un certain nombre de colonnes qui représentent les propriétés de cet élément. Tous les éléments n’auront pas une 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 peut contenir des informations relatives à System.Music.Artist.

Avec ces méthodes, vous accédez à la propriété ou la modifiez à l’aide d’une chaîne Unicode délimitée par des virgules, terminée par null, qui spécifie un ou plusieurs noms de colonnes du magasin de propriétés : « System.Document.Author, System.Document.Title ».

Utilisation de l’extension de termes de requête

Méthodes Description
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::p ut_QueryTermExpansion
Obtient/Définit l’indicateur d’expansion du terme de recherche.

 

Cette méthode permet l’expansion de certains termes de requête avec des caractères carte génériques, de la même façon que l’extension d’expression régulière. L’extension de préfixe recherche les mots ayant le même préfixe (fun/entonnoir). Si elle n’est pas définie, la valeur par défaut est SEARCH_TERM_PREFIX_ALL. Les valeurs prises en charge de l’énumération SEARCH_TERM_EXPANSION sont les suivantes :

  • SEARCH_TERM_PREFIX_ALL : tous les termes de recherche sont développés
  • SEARCH_TERM_NO_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::get_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::get_QueryMaxResults
ISearchQueryHelper::p ut_QueryMaxResults
Obtient/Définit le nombre maximal de résultats à retourner par une requête (c’est-à-dire SELECT TOP n). La valeur par défaut est -1, ce qui signifie qu’aucune clause de résultats maximum n’est générée.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::p ut_QuerySorting
Obtient/Définit l’ordre de tri pour le jeu de résultats de requête (ORDER BY). Si aucune clause ORDER BY n’existe, les résultats sont retournés dans un ordre non déterministe.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::p ut_QuerySyntax
Obtient/Définit la syntaxe de la requête : Syntaxe de requête avancée ou Syntaxe de requête naturelle.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::p ut_QueryWhereRestrictions
Obtient/Définit les restrictions ajoutées via les clauses WHERE.

 

Interrogation de l’index programmatiquement

Utilisation des approches SQL et AQS pour interroger l’index

Interrogation de l’index avec le protocole search-ms

Interrogation de l’index avec la syntaxe SQL de Recherche Windows

Utilisation de la syntaxe de requête avancée par programmation