5

有没有办法忽略某些模式的 Windows 搜索索引?

例如,我想跳过以下文件夹:

C:\Git**.git\ C:\Git**\packages\ C:\misc\git**.git\ C:\misc\git**\packages\

这些会导致搜索结果中出现数千个额外的噪声匹配。

我确实想索引 C:\misc\git 中的各种文件夹,除了 .git 或 .packages 子文件夹中的内容。我只找到了一种静态方法来做到这一点,而没有任何基于模式的方法。这似乎是一个常见的用例,有点像 git 使用 .gitignore 将某些内容排除在版本控制之外的方式。在这种情况下,它会将其排除在搜索索引之外。

我在“索引位置”中看不到任何此类模式的工具。我认为可以通过运行某种脚本来完成,以在每次内容更改时排除当前匹配项(例如添加了 C:\misc\git\somethingnew),但这与优雅相反。

任何帮助,将不胜感激。

一分钱

4

2 回答 2

3

根据@PryrtCJ的这个答案,Windows 注册表项包含允许使用通配符的规则。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\WorkingSetRules\

regedit 与 *.git\ 排除规则

要添加此类规则,我建议在索引选项中将一个 .git 文件夹添加到排除路径,然后找到正确的键(URL 将是 sth.like file:///C:\[partition-or-disk-id]\path\to\.git\)。然后编辑密钥权限(选择包含 .git URL 的密钥并右键单击它) - 您需要将密钥所有者从 SYSTEM 更改为您的帐户,并允许管理员组修改密钥。

高级权限设置

如果您有权修改它,请右键单击 URL,选择修改并将其内容更改为file:///*\.git\. 稍后恢复以前的权限(只是为了避免问题)。

这样您就可以创建任何 * 过滤器,例如。file:///C:\misc\*\packages\*

于 2018-05-18T08:15:16.090 回答
0

可以通过编程方式管理 Windows 搜索索引。

您可以使用以下模式从搜索索引中排除文件夹:

  • file:///C:\*\packages\匹配名为“packages”的文件夹及其内容
  • file:///D:\*\obj\匹配名为“obj”的文件夹及其内容

我在 Windows 11 21h2 下使用 C# 成功测试了这些模式。

添加新规则的示例 (Powershell)

# [wsearch-add-rule.ps1]
# Source: https://stackoverflow.com/questions/13390514/how-to-add-a-location-to-windows-7-8-search-index-using-batch-or-vbscript/13454571#13454571
Add-Type -path ".\Microsoft.Search.Interop.dll"
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 
$cat = $sm.GetCatalog("SystemIndex")
$csm = $cat.GetCrawlScopeManager()
$csm.AddUserScopeRule("file:///D:\*\obj\", $true, $false, $null)
$csm.SaveAll()

列出现有规则的示例 (Powershell)

# [wsearch-list-rules.ps1]
# Source: https://powertoe.wordpress.com/2010/05/17/powershell-tackles-windows-desktop-search/
Add-Type -path "Microsoft.Search.Interop.dll"
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 
$cat = $sm.GetCatalog("SystemIndex")
$csm = $cat.GetCrawlScopeManager()
$scopes = @()
$begin = $true
[Microsoft.Search.Interop.CSearchScopeRule]$scope = $null
$enum = $csm.EnumerateScopeRules() 
while ($scope -ne $null -or $begin) {
     $enum.Next(1,[ref]$scope,[ref]$null)
     $begin = $false
     $scopes += $scope
}
$scopes|ogv

Microsoft.Search.Interop.dll可以在 web 存档上的旧 Windows Search 3x SDK 中找到所需的

资源 :

于 2022-01-18T20:17:49.463 回答