Поделиться через


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

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

  • Получите строку подключения OLE DB для подключения к базе данных Windows Search.
  • Преобразуйте пользовательские запросы расширенного синтаксиса запросов (AQS) в windows Search язык SQL (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 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
    
    

Использование метода 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 не создает значимого ранжирования.

 

Работа с идентификаторами языкового стандарта

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

 

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

Например, если у вас есть версия "английский—США" без пакетов MUI, языковой стандарт содержимого и ключевое слово языковой стандарт будут иметь значение 1033. Если у вас версия на немецком языке без пакетов MUI, языковой стандарт содержимого и языковой стандарт ключевое слово имеют значение 1031 (gr-gr). Однако если у вас есть версия на английском языке с пакетом MUI на румынском языке, языковой стандарт содержимого — 2072 (ro), а языковой стандарт ключевое слово — 1033 (en-us).

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

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

 

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

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

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

Методы Описание
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::p ut_QueryTermExpansion
Возвращает/задает флаг расширения условия поиска.

 

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

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

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

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

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

 

Отправка программных запросов к индексу

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

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

Запрос к индексу с помощью синтаксиса SQL Windows Search

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