我可以通过注册表(见下文)启用 Windows Search 的日志记录,但这只会捕获通过 Windows Search 的默认用户界面发送的查询。我想捕获 Outlook 2003 , Outlook 2007 , OneNote 2007 或访问SystemIndex
的任何其他应用程序使用的查询。< / p>
HKEY_CURRENT_USER\Software\Microsoft\Windows Desktop Search\DS\WriteLog[DWORD]0|1
我想要做的是分析这些查询,以便更好地了解如何为我用于搜索我的代码库(物理文件)的个人搜索实用程序(WinForms / WPF / ADO.NET / OleDb)构建查询系统)。
如何跟踪在 Windows搜索的SystemIndex上执行的所有查询?
答案 0 :(得分:0)
如果您真的想要捕获对SystemIndex的所有访问,那么这将是非常高的顺序,因为可以访问它multiple ways:
如果我们忽略了一点,并专注于你的另一个目标:
我想要做的是分析这些查询以获得一个 更好地了解如何建立 查询我的个人搜索工具
然后我会查看ISearchQueryHelper界面。
ISearchQueryHelper接口
提供构建查询的方法 从用户输入,将查询转换为 Windows搜索SQL,并获取一个 用于初始化a的连接字符串 连接到Window Search索引。
该界面的一种方法是GenerateSQLFromUserQuery,它可以帮助你。
GenerateSQLFromUserQuery
生成结构化查询语言(SQL) 基于客户端提供的查询进行查询 以Advanced表示的字符串 查询语法(AQS)或自然查询 语法(NQS)。
答案 1 :(得分:0)
系统索引实现为OLE DB源。您可以从ISearchQueryHelper::get_ConnectionString提供的连接字符串中找到数据源。我一直在寻找一种监控OLE DB源的方法,但到目前为止还没有找到。
OLE DB归结为默认情况下存在于Windows.edb
个人资料文件夹中的名为\All Users\Application Data\Microsoft\Search\Data\Applications\Windows\
的{{3}}(ESE)文件。
所有ESE文件均由ESENT.DLL管理。可以挂钩此DLL并跟踪查询。使用Extensible Storage Engine和StraceNT
等程序可以进行挂钩和记录经过几个小时的搜索,似乎没有更简单的方法来获取所有Windows搜索查询的日志。由于学习查询语法是您的目标,因此在其他地方寻找学习辅助工具可能更为简单,例如使用默认的Windows搜索UI和使用您已了解的查询日志。使用ISearchQueryHelper
接口将ADS和NDS查询转换为SQL也可能有所帮助。
答案 2 :(得分:0)
我相信答案就在这里,但没有时间尝试。