Compartir a través de


Consulta del índice con ISearchQueryHelper

Puede usar la interfaz ISearchQueryHelper para consultar el índice. Esta interfaz se implementa como una clase auxiliar para ISearchCatalogManager (e ISearchCatalogManager2) y se obtiene llamando a ISearchCatalogManager::GetQueryHelper. Esta interfaz le permite:

  • Obtenga una cadena de conexión OLE DB para conectarse a la base de datos de Windows Search.
  • Convertir consultas de usuario de sintaxis de consulta avanzada (AQS) en Windows Search Lenguaje de consulta estructurado (SQL).
  • Especifique las restricciones de consulta que se pueden expresar en SQL, pero no en AQS.

Este tema se organiza de la siguiente manera:

Introducción con ISearchQueryHelper

Hay algunas interfaces y métodos clave que debes tener en cuenta antes de que puedas empezar a consultar Windows Search mediante programación mediante la interfaz ISearchQueryHelper . En un nivel alto, debe seguir estos pasos:

  1. Cree una instancia de 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. Obtenga una instancia de ISearchCatalogManager mediante ISearchManager::GetCatalog. El nombre del catálogo del sistema para Windows Search es 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. Obtenga una instancia de ISearchQueryHelper mediante ISearchCatalogManager::GetQueryHelper.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. Después de tener una instancia de ISearchQueryHelper, puede obtener la cadena de conexión usada para conectarse al conector OLE DB del índice de 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
    
    

Usar el método GenerateSqlFromUserQuery

El método ISearchQueryHelper::GenerateSQLFromUserQuery transforma la entrada del usuario en una cadena de consulta SQL, que luego se puede enviar al proveedor OLE DB para Windows Search. Este método traduce la consulta Sintaxis avanzada de consulta (AQS) o sintaxis de consulta natural (NQS) introducida por el usuario en SQL y le permite agregar otros fragmentos de SQL según sea necesario.

La cadena de consulta SQL se devuelve de la siguiente forma:

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> ]
    

A continuación se muestra un ejemplo de la cadena SQL devuelta desde la llamada a 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"

Nota

El método genera los predicados FREETEXT y CONTAINS porque CONTAINS por sí solo no genera una clasificación significativa.

 

Trabajar con identificadores de configuración regional

Método Descripción
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::p ut_QueryContentLocale
Obtiene o coloca el identificador de código de idioma (LCID) de la consulta. Esto ayuda a obtener el separador de palabras y el lematizador correctos para comparar los términos de consulta con el índice de catálogo o invertido. El valor predeterminado es la configuración regional de entrada actual.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::p ut_QueryKeywordLocale
Obtiene o coloca el LCID para el lenguaje que se va a usar al analizar palabras clave de la sintaxis avanzada de consulta (AQS). El valor predeterminado es la configuración regional del usuario predeterminada.

 

La configuración regional de contenido y la configuración regional de palabras clave son identificadores de configuración regional (LCID) que ayudan al motor de búsqueda a usar los separadores de palabras correctos mediante la identificación del idioma de los términos de consulta y el idioma de las palabras clave de AQS. Estos no siempre son los mismos LCID porque Windows Search se ofrece en una serie de versiones internacionales y también incluye paquetes de interfaz de usuario multilingüe (MUI) para más idiomas. La configuración regional de contenido identifica el LCID para el idioma en el que los usuarios escriben su consulta de búsqueda, mientras que la configuración regional de palabra clave identifica el LCID que usa el motor de búsqueda al analizar palabras clave de sintaxis de consulta avanzada (AQS).

Por ejemplo, si tiene la versión english-US sin paquetes MUI, la configuración regional de contenido y la configuración regional de palabras clave son 1033. Si tiene la versión alemana sin paquetes MUI, la configuración regional de contenido y la configuración regional de palabra clave son 1031 (gr-gr). Sin embargo, si tiene la versión en inglés con el paquete MUI rumano, la configuración regional del contenido es 2072 (ro) y la configuración regional de palabra clave es 1033 (en-us).

Trabajar con propiedades y columnas

Métodos Descripción
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::p ut_QueryContentProperties
Obtiene o establece las propiedades de contenido de la búsqueda (columna de propiedad enumerada en las cláusulas CONTAINS o FREETEXT).
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::p ut_QuerySelectColumns
Obtiene o establece las columnas (o propiedades) solicitadas en la instrucción SELECT. El valor predeterminado es System.ItemUrl y las propiedades usadas en la cláusula WHERE.

 

Los elementos se representan en el almacén de propiedades como una fila. Cada fila contiene una serie de columnas que representan las propiedades de ese elemento. No todos los elementos tendrán un valor para una propiedad determinada. Por ejemplo, un archivo de audio normalmente no contiene un valor para la propiedad System.Property.FromName, pero puede contener información sobre System.Music.Artist.

Con estos métodos, se accede o modifica la propiedad con una cadena Unicode delimitada por comas, terminada en null que especifica uno o más nombres de columna del almacén de propiedades: "System.Document.Author, System.Document.Title".

Trabajar con la expansión de términos de consulta

Métodos Descripción
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::p ut_QueryTermExpansion
Obtiene o establece la marca de expansión del término de búsqueda.

 

Este método habilita la expansión de algunos términos de consulta con caracteres comodín, similar a la expansión de expresiones regulares. La expansión de prefijo busca palabras con el mismo prefijo (fun/embudo). Si no se establece, el valor predeterminado es SEARCH_TERM_PREFIX_ALL. Los valores admitidos de la enumeración SEARCH_TERM_EXPANSION son los siguientes:

  • SEARCH_TERM_PREFIX_ALL: se expanden todos los términos de búsqueda
  • SEARCH_TERM_NO_EXPANSION: no se expanden términos de búsqueda

Trabajar con otros métodos ISearchQueryHelper

Muchos de los métodos de la interfaz ISearchQueryHelper se usan para establecer argumentos de consulta o definir las propiedades devueltas.

Métodos Descripción
ISearchQueryHelper::get_ConnectionString
Devuelve la cadena de conexión OLE DB. Este es el método preferido para obtener una cadena de conexión con el formato correcto y correcto.
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::p ut_QueryMaxResults
Obtiene o establece el número máximo de resultados que va a devolver una consulta (es decir, SELECT TOP n). El valor predeterminado es -1, lo que significa que no se genera ninguna cláusula de resultados máxima.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::p ut_QuerySorting
Obtiene o establece el criterio de ordenación del conjunto de resultados de la consulta (ORDER BY). Si no existe ninguna cláusula ORDER BY, los resultados se devuelven en orden no determinista.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::p ut_QuerySyntax
Obtiene o establece la sintaxis de la consulta: Sintaxis avanzada de consulta o Sintaxis de consulta natural.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::p ut_QueryWhereRestrictions
Obtiene o establece las restricciones anexadas a través de cláusulas WHERE.

 

Consulta del índice mediante programación

Uso de enfoques de SQL y AQS para consultar el índice

Consulta del índice con el protocolo search-ms

Consulta del índice con la sintaxis SQL de Windows Search

Uso de la sintaxis de consulta avanzada mediante programación