3

我可以通过注册表启用Windows Search的日志记录(见下文),但这仅捕获通过Windows Search的默认用户界面发送的查询。我想捕获Outlook 2003Outlook 2007OneNote 2007或任何其他访问SystemIndex.

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

我想做的是分析这些查询,以便更好地了解如何为我用于搜索代码库(物理文件系统)的个人搜索实用程序(WinForms/WPF/ADO.NET/OleDb)构建查询。

我将如何跟踪在Windows Search的 SystemIndex 上执行的所有查询?

4

3 回答 3

0

系统索引作为 OLE DB 源实现。您可以从ISearchQueryHelper::get_ConnectionString提供的连接字符串中找到数据源。我一直在寻找一种监视 OLE DB 源的方法,但到目前为止一无所获。

OLE DB 归结为名为可扩展存储引擎Windows.edb(ESE) 的文件,默认情况下,该文件位于\All Users\Application Data\Microsoft\Search\Data\Applications\Windows\配置文件文件夹中。

所有 ESE 文件都由 ESENT.DLL 管理。可以挂钩此 DLL 并跟踪查询。使用StraceNTxptruss等程序可以进行挂钩和日志记录

经过几个小时的搜索,似乎没有任何更简单的方法可以获取所有 Windows 搜索查询的日志。由于学习查询语法是您的目标,因此在其他地方寻找学习帮助可能会更简单,例如使用默认的 Windows 搜索 UI 和使用您已经知道的查询日志。ISearchQueryHelper尝试使用该界面将 ADS 和 NDS 查询转换为 SQL 也可能会有所帮助。

于 2010-07-21T21:19:19.897 回答
0

如果您真的想捕获对 SystemIndex 的所有访问,那将是一项艰巨的任务,因为可以通过多种方式访问​​它:

如果我们暂时忽略这一点并专注于您的其他目标:

我想做的是分析这些查询,以便更好地了解如何为我的个人搜索实用程序构建查询

然后我会查看ISearchQueryHelper接口。

ISearchQueryHelper 接口

提供从用户输入构建查询、将查询转换为 Windows Search SQL 以及获取连接字符串以初始化与 Window Search 索引的连接的方法。

该接口的一种方法是GenerateSQLFromUserQuery,它可以帮助您。

生成 SQLFromUserQuery

根据以高级查询语法 (AQS) 或自然查询语法 (NQS) 表示的客户端提供的查询字符串生成结构化查询语言 (SQL) 查询。

于 2010-07-15T15:59:28.513 回答
0

我相信答案就在这里,但还没有时间尝试。

于 2010-12-20T22:49:21.903 回答