Запрос индекса с помощью ISearchQueryHelper
Для запроса индекса можно использовать интерфейс ISearchQueryHelper . Этот интерфейс реализуется как вспомогательный класс для ISearchCatalogManager (и ISearchCatalogManager2) и получается путем вызова ISearchCatalogManager::GetQueryHelper. Этот интерфейс позволяет:
- Получите строку подключения OLE DB для подключения к базе данных Windows Search.
- Преобразуйте пользовательские запросы расширенного синтаксиса запросов (AQS) в windows Search язык SQL (SQL).
- Укажите ограничения запросов, которые могут быть выражены в SQL, но не в AQS.
Эта тема организована следующим образом:
- начало работы с ISearchQueryHelper
- Использование метода GenerateSqlFromUserQuery
- Работа с идентификаторами языкового стандарта
- Работа со свойствами и столбцами
- Работа с расширением терминов запроса
- Работа с другими методами ISearchQueryHelper
- Связанные темы
начало работы с ISearchQueryHelper
Существует несколько ключевых интерфейсов и методов, о которых следует помнить, прежде чем начать программный запрос к Поиску Windows с помощью интерфейса ISearchQueryHelper . В общих чертах необходимо выполнить следующие действия.
Создайте экземпляр 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));
Получите экземпляр 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);
Получите экземпляр ISearchQueryHelper с помощью ISearchCatalogManager::GetQueryHelper.
// Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface ISearchQueryHelper* pQueryHelper; hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
После создания экземпляра 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. |
Связанные темы