Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 da Pesquisa do Windows.
- Converta consultas de usuário do AQS (Advanced Query Syntax) em SQL (Linguagem de Consulta Estruturada) do Windows Search.
- 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 ao ISearchQueryHelper
- Usando o método GenerateSqlFromUserQuery
- Trabalhando com identificadores de localidade
- Trabalhando com propriedades e colunas
- Trabalhando com a expansão de termos de consulta
- Trabalhando com outros métodos ISearchQueryHelper
- tópicos relacionados
Introdução ao 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 string 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 para o provedor OLE DB para Pesquisa do Windows. Esse método converte a sintaxe de consulta avançada (AQS) ou a consulta NQS (Sintaxe de Consulta Natural) inserida pelo usuário no SQL e permite adicionar 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 | Description |
|---|---|
|
ISearchQueryHelper::get_QueryContentLocale/ ISearchQueryHelper::put_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 catálogo ou índice invertido. O padrão é a localidade de entrada atual. |
|
ISearchQueryHelper::get_QueryKeywordLocale/ ISearchQueryHelper::put_QueryKeywordLocale |
Obtém/coloca o LCID para o idioma a ser usado ao analisar palavras-chave AQS (Sintaxe avançada de consulta). O padrão é a localidade de usuário padrão. |
A localidade de conteúdo e a localidade da palavra-chave são LCID (identificadores de localidade) que ajudam o mecanismo de pesquisa a usar os separadores de palavras corretos identificando o idioma dos termos da consulta e o idioma das palavras-chave do AQS. Eles 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 a LCID para o idioma em que os usuários inseriram sua consulta de pesquisa, enquanto a localidade da palavra-chave identifica a 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 English-US sem pacotes MUI, a localidade do conteúdo e a localidade da palavra-chave serão 1033. Se você tiver a versão alemã sem pacotes MUI, a localidade do conteúdo e a localidade da palavra-chave 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 da palavra-chave será 1033 (en-us).
Trabalhando com propriedades e colunas
| Methods | Description |
|---|---|
|
ISearchQueryHelper::get_QueryContentProperties/ ISearchQueryHelper::put_QueryContentProperties |
Obtém/define as propriedades de conteúdo da pesquisa (coluna de propriedade listada nas cláusulas CONTAINS ou FREETEXT). |
|
ISearchQueryHelper::get_QuerySelectColumns/ ISearchQueryHelper::put_QuerySelectColumns |
Obtém/define as colunas (ou propriedades) solicitadas na instrução SELECT. O padrão é System.ItemUrl, assim como 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 o 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 ampliação de termos de consulta
| Methods | Description |
|---|---|
|
ISearchQueryHelper::get_QueryTermExpansion ISearchQueryHelper::put_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 curinga, semelhante à expansão de expressão regular. A expansão de prefixo procura palavras com o mesmo prefixo (fun/funil). Se não for definido, o valor padrão será SEARCH_TERM_PREFIX_ALL. Os valores suportados pela 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 termo de pesquisa é expandido
Trabalhando com outros métodos do ISearchQueryHelper
Muitos dos métodos na interface ISearchQueryHelper são usados para definir argumentos de consulta ou definir as propriedades retornadas.
| Methods | Description |
|---|---|
|
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::put_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 limite de resultados é gerada. |
|
ISearchQueryHelper::get_QuerySorting ISearchQueryHelper::put_QuerySorting |
Obtém/define a ordem de classificação do 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::put_QuerySyntax |
Obtém/define a sintaxe da consulta: sintaxe de consulta avançada ou sintaxe de consulta natural. |
|
ISearchQueryHelper::get_QueryWhereRestrictions ISearchQueryHelper::put_QueryWhereRestrictions |
Obtém/define as restrições acrescentadas por meio de cláusulas WHERE. |
Tópicos relacionados