Отслеживание запросов Windows Search

Я могу включить ведение журнала для поиска Windows через реестр (см. Ниже), но при этом регистрируются только запросы, отправленные через пользовательский интерфейс по умолчанию для поиска Windows. Я хочу записывать запросы, используемые Outlook 2003, Outlook 2007, OneNote 2007 или любым другим приложением, которое обращается к SystemIndex,

HKEY_CURRENT_USER\Software\Microsoft\Windows Desktop Search\DS\WriteLog[DWORD]0|1

Я хочу проанализировать эти запросы, чтобы лучше понять, как создавать запросы для моей личной утилиты поиска (WinForms/WPF/ADO.NET/OleDb), которую я использую для поиска в своей библиотеке кода (физической файловой системе).

Как мне отслеживать все запросы, выполняемые в SystemIndex поиска Windows?

3 ответа

Системный индекс реализован как источник OLE DB. Вы можете узнать источник данных из строки подключения, предоставленной ISearchQueryHelper:: get_ConnectionString. Я искал способ контролировать источник OLE DB, но пока ничего не нашел.

OLE DB сводится к файлу модуля расширяемого хранилища (ESE) с именем Windows.edb который существует по умолчанию в \All Users\Application Data\Microsoft\Search\Data\Applications\Windows\ папка профиля.

Все файлы ESE управляются ESENT.DLL. Может быть возможно перехватить эту DLL и отследить запросы. Подключение и регистрация возможна с помощью таких программ, как StraceNT и xptruss

После нескольких часов поиска, кажется, нет более простого способа получить журнал всех запросов Windows Search. Поскольку изучение синтаксиса запроса является вашей целью, может быть проще найти учебные пособия в другом месте, например, с помощью пользовательского интерфейса поиска Windows по умолчанию и журнала запросов, о котором вы уже знаете. Также может быть полезно поэкспериментировать с преобразованием запросов ADS и NDS в SQL с использованием ISearchQueryHelper интерфейс.

Если вы действительно хотите зафиксировать все обращения к SystemIndex, это будет довольно сложный порядок, так как есть несколько способов получить к нему доступ:

Если мы немного проигнорируем это и сосредоточимся на другой вашей цели:

Я хочу проанализировать эти запросы, чтобы лучше понять, как создавать запросы для моей персональной поисковой утилиты.

Тогда я бы заглянул в интерфейс ISearchQueryHelper.

Интерфейс ISearchQueryHelper

Предоставляет методы для построения запроса из пользовательского ввода, преобразования запроса в Windows Search SQL и получения строки подключения для инициализации подключения к индексу поиска Windows.

Одним из методов этого интерфейса является GenerateSQLFromUserQuery, который может вам помочь.

GenerateSQLFromUserQuery

Создает запрос языка структурированных запросов (SQL) на основе предоставленной клиентом строки запроса, выраженной либо в расширенном синтаксисе запроса (AQS), либо в естественном синтаксисе запроса (NQS).

Я верю, что ответ здесь, но не успел его опробовать.

Другие вопросы по тегам