Отслеживание поисковых запросов Windows

Я могу включить ведение журнала для Поиска 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?


person AMissico    schedule 29.06.2010    source источник


Ответы (3)


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

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

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

Затем я просматривал интерфейс ISearchQueryHelper.

Интерфейс ISearchQueryHelper

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

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

СоздатьSQLFromUserQuery

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

person GalacticJello    schedule 15.07.2010
comment
Я уже использую и понимаю интерфейс и метод. Должен быть способ захвата запросов к индексу. Независимо от множества способов захвата пользовательского запроса, я считаю, что все преобразуется в оператор SELECT на самом низком уровне. Я хочу зафиксировать эти операторы SELECT. - person AMissico; 16.07.2010
comment
Вы можете попробовать найти DLL, которая реализует ISearchQueryHelper и/или интересующие методы, и создать оболочку вокруг нее, поэтому каждый процесс, который ее использует, будет загружать вас вместо этого, а затем вы просто регистрируете запросы и передаете запрос реальной dll ... - person GalacticJello; 16.07.2010

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

OLE DB сводится к существующему файлу Extensible Storage Engine (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.

person mdma    schedule 21.07.2010
comment
полезно для экспериментов: я смог настроить свои запросы, чтобы лучше дублировать результаты службы индексирования. - person AMissico; 22.07.2010
comment
Мне удалось продублировать запросы пользовательского интерфейса поиска Windows по умолчанию, просмотрев журнал, созданный при установке WriteLog. Он является общим и извлекает слишком много ненужных свойств, таких как изображение, музыка и другие глупые свойства, которые мне не нужны для поиска кода. Я хочу посмотреть, как Outlook и OneNote обрабатывают запросы, потому что эти приложения будут выполнять определенные запросы. Я хочу создавать запросы, которые могут эффективно искать код. - person AMissico; 22.07.2010

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

person AMissico    schedule 20.12.2010