4

我正在尝试使用 SQL 查询 Windows 桌面搜索 API。

我不得不说我真的很讨厌 windows 7 搜索 GUI,所以我决定自己写。我有很多被索引的文件(大约 1.000.000),我想搜索名称。类似的东西:告诉我每个包含“兔子”的名字。

但是在这里我遇到了性能问题。正在寻找

SELECT "System.ItemPathDisplay" 
FROM "SystemIndex" 
WHERE System.FileName LIKE 'egon%'

真的很快。也是%egon替代方案。但%egon%需要永远。我不确定这是指数的性质(我知道可能性会大大增加)还是我做错了什么。

问题是:

  • windows索引只是一个大的SQL数据库对吗?
  • 如果是这样,我在哪里可以找到有关数据库结构(主键、索引)的确切信息。

如果我有,它基本上只是优化 SQL。

替代问题:是否有人知道快速 SQL 语句来查找名称中某处带有egon的所有文件。

编辑:为什么我不喜欢搜索 GUI

好吧,与 XP 相比,它只是不直观。如果你禁用狗并使用旧的 XP 界面,我可以创建一个搜索查询,如:

  • 超过 1 个月的所有文件
  • 大于 10 MB
  • 名称模式*_homework_*.docx

在不“学习”语法的情况下在 Windows 7 中尝试此操作。地狱,我不想为了找到一个文件而学习另一种语法。

另一个主要问题可能是我的搜索习惯。大多数时候,我以某种方式知道文件名(或部分)并且只是想要位置。如果您以这种方式使用搜索,您会遇到几个问题:

  • 首先,您必须始终在其前面加上名称:
  • 然后文件夹名称布局很愚蠢(我认为它是按父文件夹排序,而不是完整路径,因为.. tada ...见下一点)
  • 然后,更烦人的是,如果您有一个结果列表并尝试对它们进行排序,则需要很长时间

现在我真的认为我的系统有一个错误。我试图快速检查它,在一些平均大小的文件夹中搜索“测试”,他找到了一些文件。然后我尝试将它们分类为文件夹(以验证我的第二点),现在他只是在永远搜索......我的意思是说真的,当我打字时他试图找到“你好”这个词......哦,完成了 - 他找到大约 20 个文件。所以,现在,让我们尝试一下……好吧,现在看来他已经康复了……但是,为了我的口味,慢点……

所以,关于搜索的诅咒已经够多了:-)

4

3 回答 3

4

看起来他们正在为名称建立索引,因此只要您指定了字符串的开头,它就可以使用索引,但如果您没有,它必须使用表扫描。

假设他们使用的是 Microsoft 的全文搜索引擎,然后尝试使用类似:
... WHERE system.filename CONTAINS 'egon'

基本上有两种选择:它会因为无效而被拒绝(即这个 SQL 接口不支持他们的 FT 搜索扩展),或者它会更快一些。

编辑:哎呀——语法应该是“包含(system.filename,'e​​gon')”。对不起。

于 2009-10-09T02:28:09.263 回答
4

也许试试

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";
于 2009-10-09T02:29:40.593 回答
0

这很慢,因为您无法使用索引。原因是您在字符串中的某个位置而不是在字符串的开头搜索匹配项,这意味着您必须扫描整个表以查找内容。

于 2009-10-09T02:27:33.017 回答