Partilhar via


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

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:

  1. 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));      
    
  2. 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);
    
    
  3. Obtenha uma instância de ISearchQueryHelper usando ISearchCatalogManager::GetQueryHelper.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. 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.

 

Consulta do índice de maneira programática

Usando abordagens do SQL e do AQS para consultar o índice

Consultando o índice com o protocolo search-ms

Consultando o índice com a sintaxe SQL do Windows Search

Usando a sintaxe de consulta avançada programaticamente