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

我不得不说我真的很讨厌 Windows 7 搜索 GUI,所以我决定编写自己的。我有很多索引文件(大约 1.000.000),并且我想搜索名称。就像是:显示所有包含“bunny”的名字。

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

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

真的很快。还有 %egon 选择。但 %egon% 需要永远。我不确定这是否是索引的本质(我知道可能性大大增加)或者我是否做错了什么。

问题是:

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

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

替代问题: 有谁知道一个快速的 SQL 语句来查找所有文件 埃贡 名称中的某处。

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

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

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

在 Windows 7 中尝试此操作,无需“学习”语法。见鬼,我愿意 不是 想要学习另一种语法只是为了找到一个文件。

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

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

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

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

有帮助吗?

解决方案

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

假设他们使用 Microsoft 的全文搜索引擎,然后尝试使用以下内容:
...其中 system.filename 包含“egon”

基本上有两种选择:它将被拒绝为无效(即这个 SQL 接口不支持他们的 F-T 搜索扩展)否则它会快很多。

编辑:哎呀——语法应该是“contains(system.filename, 'egon')”。对此感到抱歉。

其他提示

也许尝试一下

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top