Отслеживание запросов 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, это будет довольно сложный порядок, так как есть несколько способов получить к нему доступ:
- Использование SQL и AQS подходов для запроса индекса
- Запрос индекса с ISearchQueryHelper
- Запрос индекса с протоколом search-ms
- Запрос индекса с помощью синтаксиса SQL поиска Windows
- Использование расширенного синтаксиса запросов программно
Если мы немного проигнорируем это и сосредоточимся на другой вашей цели:
Я хочу проанализировать эти запросы, чтобы лучше понять, как создавать запросы для моей персональной поисковой утилиты.
Тогда я бы заглянул в интерфейс ISearchQueryHelper.
Интерфейс ISearchQueryHelper
Предоставляет методы для построения запроса из пользовательского ввода, преобразования запроса в Windows Search SQL и получения строки подключения для инициализации подключения к индексу поиска Windows.
Одним из методов этого интерфейса является GenerateSQLFromUserQuery, который может вам помочь.
GenerateSQLFromUserQuery
Создает запрос языка структурированных запросов (SQL) на основе предоставленной клиентом строки запроса, выраженной либо в расширенном синтаксисе запроса (AQS), либо в естественном синтаксисе запроса (NQS).
Я верю, что ответ здесь, но не успел его опробовать.
- Устранение неполадок в Windows DAC / MDAC http://msdn.microsoft.com/en-us/library/ms693114(VS.85).aspx
- Отслеживание доступа к данным в SQL Server 2008 http://msdn.microsoft.com/en-us/library/cc765421.aspx