Запрос индекса с помощью ISearchQueryHelper

Для запроса индекса можно использовать интерфейс ISearchQueryHelper . Этот интерфейс реализуется как вспомогательный класс для ISearchCatalogManager (и ISearchCatalogManager2) и получается путем вызова ISearchCatalogManager::GetQueryHelper. Этот интерфейс позволяет выполнять следующие действия.

  • Получите строку подключения OLE DB для подключения к базе данных Поиска Windows.
  • Преобразование запросов пользователей расширенного синтаксиса запросов (AQS) в язык структурированных запросов Windows (SQL).
  • Укажите ограничения запросов, которые могут быть выражены в SQL, но не в AQS.

Этот раздел организован следующим образом:

Начало работы с ISearchQueryHelper

Перед запуском программного запроса поиска Windows с помощью интерфейса ISearchQueryHelper следует учитывать несколько ключевых интерфейсов и методов. На высоком уровне необходимо выполнить следующие действия.

  1. Инициализировать экземпляр 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. Получите экземпляр ISearchCatalogManager с помощью ISearchManager::GetCatalog. Имя системного каталога для поиска 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. Получите экземпляр ISearchQueryHelper с помощью ISearchCatalogManager::GetQueryHelper.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. После получения экземпляра ISearchQueryHelper можно получить строку подключения, используемую для подключения к соединителю OLE DB индекса поиска Windows.

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

Использование метода GenerateSqlFromUserQuery

Метод ISearchQueryHelper::GenerateSQLFromUserQuery преобразует входные данные пользователя в строку запроса SQL, которая затем может быть отправлена поставщику OLE DB для поиска Windows. Этот метод преобразует запрос расширенного синтаксиса запросов (AQS) или синтаксис естественного запроса (NQS), введенный пользователем в SQL, и позволяет добавлять другие фрагменты SQL по мере необходимости.

Строка запроса SQL возвращается в следующей форме:

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

Ниже приведен пример строки SQL, возвращаемой из вызова 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"

Замечание

Метод создает предикаты FREETEXT и CONTAINS, так как только CONTAINS не создает значимого ранжирования.

 

Работа с идентификаторами локали

Метод Description
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::put_QueryContentLocale
Возвращает/помещает идентификатор кода языка (LCID) запроса. Это помогает использовать правильные инструменты wordbreaker и stemmer для сравнения терминов запросов с каталогом или инвертированным индексом. По умолчанию используется текущая языковая локаль ввода.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::put_QueryKeywordLocale
Возвращает/устанавливает LCID для языка, который будет использоваться при анализе ключевых слов расширенного синтаксиса запросов (AQS). Локаль пользователя по умолчанию устанавливается как стандарт.

 

Языковой стандарт содержимого и языковой стандарт ключевых слов — это идентификаторы языкового стандарта (LCID), которые помогают поисковой системе использовать правильные средства разбиения слов, определяя язык терминов запроса и язык ключевых слов AQS. Это не всегда те же LCID, так как поиск Windows предлагается в нескольких международных версиях, а также включает пакеты многоязычного пользовательского интерфейса (MUI) для дополнительных языков. Локаль содержимого определяет LCID для языка, на котором пользователи вводят свои поисковые запросы, в то время как локаль ключевого слова определяет LCID, используемый поисковой системой при разборе ключевых слов расширенного синтаксиса запросов (AQS).

Например, если у вас есть версия English-US без пакетов MUI, языковой стандарт содержимого и языковой стандарт ключевого слова — 1033. Если у вас есть немецкая версия без пакетов MUI, то локаль содержимого и локаль ключевых слов — 1031 (de-DE). Однако если у вас есть английская версия с пакетом MUI для Румынии, языковой стандарт содержимого составляет 2072 (ro), а ключевой язык — 1033 (en-us).

Работа со свойствами и столбцами

Методы Description
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::put_QueryContentProperties
Возвращает/задает свойства содержимого для поиска (столбец свойств, указанный в предложениях CONTAINS или FREETEXT).
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::put_QuerySelectColumns
Возвращает/задает столбцы (или свойства), запрошенные в инструкции SELECT. Значение по умолчанию — System.ItemUrl и свойства, используемые в предложении WHERE.

 

Элементы представлены в хранилище свойств в виде строки. Каждая строка содержит ряд столбцов, представляющих свойства для этого элемента. Не все элементы будут иметь значение для данного свойства. Например, звуковой файл обычно не содержит значение свойства System.Property.FromName, но может содержать сведения о System.Music.Artist.

С помощью этих методов вы можете получить доступ или изменить свойство с помощью строки в формате Unicode с разделителями-запятыми и завершением символом NULL, которая указывает одно или несколько имен столбцов хранилища свойств: "System.Document.Author, System.Document.Title".

Работа с расширением термина запроса

Методы Description
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::put_QueryTermExpansion
Возвращает или задает флаг расширения термина поиска.

 

Этот метод позволяет расширить некоторые термины запроса с помощью символов подстановочных карточек, аналогичных расширению регулярных выражений. Расширение префикса ищет слова с тем же префиксом (fun/funnel). Если значение по умолчанию не задано, используется SEARCH_TERM_PREFIX_ALL. Поддерживаемые значения перечисления SEARCH_TERM_EXPANSION приведены следующим образом:

  • SEARCH_TERM_PREFIX_ALL — все условия поиска развернуты
  • SEARCH_TERM_NO_EXPANSION — условия поиска не развернуты

Работа с другими методами ISearchQueryHelper

Многие методы в интерфейсе ISearchQueryHelper используются для задания аргументов запроса или определения возвращаемых свойств.

Методы Description
ISearchQueryHelper::get_ConnectionString
Возвращает строку подключения OLE DB. Это предпочтительный метод получения правильно отформатированной и корректной строки подключения.
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::put_QueryMaxResults
Возвращает или задает максимальное количество результатов, возвращаемых запросом (т. е. SELECT TOP n). Значение по умолчанию — -1, то есть не применяется условие максимального количества результатов.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::put_QuerySorting
Возвращает/задает порядок сортировки для результирующего набора запросов (ORDER BY). Если предложение ORDER BY не существует, результаты возвращаются в недетерминированном порядке.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::put_QuerySyntax
Возвращает/задает синтаксис запроса: расширенный синтаксис запросов или синтаксис естественного запроса.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::put_QueryWhereRestrictions
Возвращает/задает ограничения, добавленные с помощью предложений WHERE.

 

запрос индекса программным способом

Использование подходов SQL и AQS для запроса индекса

запрос индекса с помощью протокола search-ms

Запрос к индексу с использованием синтаксиса SQL поиска Windows

использование расширенного синтаксиса запросов программным способом