Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для запроса индекса можно использовать интерфейс ISearchQueryHelper . Этот интерфейс реализуется как вспомогательный класс для ISearchCatalogManager (и ISearchCatalogManager2) и получается путем вызова ISearchCatalogManager::GetQueryHelper. Этот интерфейс позволяет выполнять следующие действия.
- Получите строку подключения OLE DB для подключения к базе данных Поиска Windows.
- Преобразование запросов пользователей расширенного синтаксиса запросов (AQS) в язык структурированных запросов Windows (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.
// 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 поиска Windows
-
использование расширенного синтаксиса запросов программным способом