Consultando o índice com ISearchQueryHelper
Você pode usar a interface ISearchQueryHelper para consultar o índice. Essa interface é implementada como uma classe auxiliar para ISearchCatalogManager (e ISearchCatalogManager2) e é obtida chamando ISearchCatalogManager::GetQueryHelper. Essa interface permite que você:
- Obtenha uma cadeia de conexão OLE DB para se conectar ao banco de dados do Windows Search.
- Converta consultas de usuário do AQS (Advanced Query Syntax) em SQL (Linguagem SQL de Pesquisa do Windows).
- Especifique as restrições de consulta que podem ser expressas no SQL, mas não no AQS.
Este tópico é organizado da seguinte maneira:
- Introdução com ISearchQueryHelper
- Usando o método GenerateSqlFromUserQuery
- Trabalhando com identificadores de localidade
- Trabalhando com propriedades e colunas
- Trabalhando com a expansão do termo de consulta
- Trabalhando com outros métodos ISearchQueryHelper
- Tópicos relacionados
Introdução com ISearchQueryHelper
Há algumas interfaces e métodos importantes que você deve estar ciente antes de começar a consultar programaticamente o Windows Search usando a interface ISearchQueryHelper . Em um alto nível, você precisa seguir estas etapas:
Instancie uma instância 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));
Obtenha uma instância de ISearchCatalogManager usando ISearchManager::GetCatalog. O nome do catálogo do sistema para a Pesquisa do Windows é
SYSTEMINDEX
.// Create ISearchCatalogManager instance ISearchCatalogManager* pSearchCatalogManager; // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);
Obtenha uma instância de ISearchQueryHelper usando ISearchCatalogManager::GetQueryHelper.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
Depois de ter uma instância do ISearchQueryHelper, você poderá obter a cadeia de conexão usada para se conectar ao conector OLE DB do índice do 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
Usando o método GenerateSqlFromUserQuery
O método ISearchQueryHelper::GenerateSQLFromUserQuery transforma a entrada do usuário em uma cadeia de caracteres de consulta SQL, que pode ser enviada ao provedor OLE DB para o Windows Search. Esse método converte a consulta AQS ( Sintaxe de Consulta Avançada ) ou NQS (Sintaxe de Consulta Natural) inserida pelo usuário no SQL e permite que você adicione outros fragmentos SQL conforme necessário.
A cadeia de caracteres de consulta SQL é retornada no seguinte formulário:
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> ]
Veja a seguir um exemplo da cadeia de caracteres SQL retornada da chamada 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"
Observação
O método gera os predicados FREETEXT e CONTAINS porque CONTAINS sozinho não gera classificação significativa.
Trabalhando com identificadores de localidade
Método | Descrição |
---|---|
ISearchQueryHelper::get_QueryContentLocale/ ISearchQueryHelper::p ut_QueryContentLocale |
Obtém/coloca o LCID (identificador de código de idioma) da consulta. Isso ajuda a obter o quebra-palavras e o lematizador corretos para comparar os termos de consulta com o índice de catálogo/invertido. O padrão é a localidade de entrada atual. |
ISearchQueryHelper::get_QueryKeywordLocale/ ISearchQueryHelper::p ut_QueryKeywordLocale |
Obtém/coloca o LCID para o idioma a ser usado ao analisar palavras-chave AQS (Sintaxe de Consulta Avançada). O padrão é a localidade de usuário padrão. |
A localidade de conteúdo e palavra-chave localidade são identificadores de localidade (LCID) que ajudam o mecanismo de pesquisa a usar os separadores de palavras corretos identificando o idioma dos termos da consulta e o idioma que as palavras-chave do AQS. Nem sempre são os mesmos LCIDs porque o Windows Search é oferecido em várias versões internacionais e também inclui pacotes MUI (Interface do Usuário Multilíngue) para mais idiomas. A localidade de conteúdo identifica o LCID para o idioma no qual os usuários inseriram sua consulta de pesquisa, enquanto a localidade palavra-chave identifica o LCID que o mecanismo de pesquisa usa ao analisar palavras-chave AQS (Sintaxe de Consulta Avançada).
Por exemplo, se você tiver a versão inglês-EUA sem pacotes MUI, a localidade de conteúdo e palavra-chave localidade serão 1033. Se você tiver a versão alemã sem pacotes MUI, a localidade de conteúdo e palavra-chave localidade serão 1031 (gr-gr). No entanto, se você tiver a versão em inglês com o pacote MUI romeno, a localidade de conteúdo será 2072 (ro) e a localidade palavra-chave será 1033 (en-us).
Trabalhando com propriedades e colunas
Métodos | Descrição |
---|---|
ISearchQueryHelper::get_QueryContentProperties/ ISearchQueryHelper::p ut_QueryContentProperties |
Obtém/define as propriedades de conteúdo para a pesquisa (coluna de propriedade listada nas cláusulas CONTAINS ou FREETEXT). |
ISearchQueryHelper::get_QuerySelectColumns/ ISearchQueryHelper::p ut_QuerySelectColumns |
Obtém/define as colunas (ou propriedades) solicitadas na instrução SELECT. O padrão é System.ItemUrl e as propriedades usadas na cláusula WHERE. |
Os itens são representados no repositório de propriedades como uma linha. Cada linha contém várias colunas que representam propriedades para esse item. Nem todos os itens terão um valor para uma determinada propriedade. Por exemplo, um arquivo de áudio normalmente não contém um valor para a propriedade System.Property.FromName, mas pode conter informações sobre System.Music.Artist.
Com esses métodos, você acessa ou modifica a propriedade com uma cadeia de caracteres Unicode delimitada por vírgulas, terminada em nulo, que especifica um ou mais nomes de coluna do repositório de propriedades: "System.Document.Author, System.Document.Title".
Trabalhando com a expansão do termo de consulta
Métodos | Descrição |
---|---|
ISearchQueryHelper::get_QueryTermExpansion ISearchQueryHelper::p ut_QueryTermExpansion |
Obtém/define o sinalizador de expansão do termo de pesquisa. |
Esse método permite a expansão de alguns termos de consulta com caracteres de cartão selvagens, semelhante à expansão de expressão regular. A expansão de prefixo procura palavras com o mesmo prefixo (fun/funnel). Se não estiver definido, o valor padrão será SEARCH_TERM_PREFIX_ALL. Os valores com suporte da enumeração SEARCH_TERM_EXPANSION são os seguintes:
- SEARCH_TERM_PREFIX_ALL - Todos os termos de pesquisa são expandidos
- SEARCH_TERM_NO_EXPANSION - Nenhum termos de pesquisa é expandido
Trabalhando com outros métodos ISearchQueryHelper
Muitos dos métodos na interface ISearchQueryHelper são usados para definir argumentos de consulta ou definir as propriedades retornadas.
Métodos | Descrição |
---|---|
ISearchQueryHelper::get_ConnectionString |
Retorna a cadeia de conexão OLE DB. Esse é o método preferencial de obter uma cadeia de conexão corretamente formatada e correta. |
ISearchQueryHelper::get_QueryMaxResults ISearchQueryHelper::p ut_QueryMaxResults |
Obtém/define o número máximo de resultados a serem retornados por uma consulta (ou seja, SELECT TOP n). O padrão é -1, o que significa que nenhuma cláusula de resultados máximo é gerada. |
ISearchQueryHelper::get_QuerySorting ISearchQueryHelper::p ut_QuerySorting |
Obtém/define a ordem de classificação para o conjunto de resultados da consulta (ORDER BY). Se nenhuma cláusula ORDER BY existir, os resultados serão retornados em ordem não determinística. |
ISearchQueryHelper::get_QuerySyntax ISearchQueryHelper::p ut_QuerySyntax |
Obtém/define a sintaxe da consulta: sintaxe de consulta avançada ou sintaxe de consulta natural. |
ISearchQueryHelper::get_QueryWhereRestrictions ISearchQueryHelper::p ut_QueryWhereRestrictions |
Obtém/define as restrições acrescentadas por meio de cláusulas WHERE. |
Tópicos relacionados