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
- Usar el método GenerateSqlFromUserQuery
- Trabajar con identificadores de configuración regional
- Trabajar con propiedades y columnas
- Trabajar con la expansión de términos de consulta
- Trabajar con otros métodos ISearchQueryHelper
- Temas relacionados
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:
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));
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);
Obtenga una instancia de ISearchQueryHelper mediante ISearchCatalogManager::GetQueryHelper.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
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. |
Temas relacionados