我正在寻找一个使用Windows搜索获得全文搜索结果的代码(默认情况下应该在Vista,7和8中可用).
我在这里找到了一些问题,并在msdn上发现了一些文本,但是它们都没有一些确切的代码可行.我尝试过使用Windows API Code Pack(因为它被称为Windows搜索的一个接口),但它只返回文件名的结果,而不是全文.
目前我正在尝试从SQL Server 2008 R2实例(也在SQL Server 2012上测试)查询Windows搜索服务.Windows搜索作为OLE DB数据源公开,为我提供了几个查询搜索索引的选项.在SQL Server中配置新的链接服务器时,Management Studio为我提供了选择Microsoft OLE DB Provider for Search的选项,这意味着我应该能够从SQL Server连接到它.然而,事实证明这是一个挑战.您将在下面找到我偶然发现的错误消息.
链接服务器"TESTSERVER"的OLE DB提供程序"Search.CollatorDSO"返回消息"命令未准备好".
消息7399,级别16,状态1,行2
OLE DB提供程序"Search.CollatorDSO"用于链接服务器"TESTSERVER"报告错误.命令没有准备好.
消息7350,级别16,状态2,行2
无法从OLE DB提供程序"Search.CollatorDSO"获取链接服务器"TESTSERVER"的列信息.
事情变得更加有趣.虽然链接服务器解决方案不起作用,但我能够在CLR函数中包装查询Windows搜索的代码(使用MSDN:以编程方式查询索引),并在SQL Server中成功使用.然而,这是不太理想的,因为设置它所需的步骤(部署库,配置权限等).我已经尝试了几个参数设置,没有任何运气.我还尝试启用一些Search.CollatorDSO提供程序选项,例如允许将提供程序实例化为进程内服务器.我目前正在使用以下设置.为了安全起见,我正在使用登录的当前安全上下文.
Microsoft OLE DB Provider for Search
(local)
Provider=Search.CollatorDSO.1;EXTENDED?PROPERTIES="Application=Windows"
-
此外,我需要搜索网络驱动器,这可以使用共享的Windows库完成吗?
我知道在过去的几年里,有更多的人一直在努力解决这个问题.我想知道是否有人能够使这个运行起来,或者能指出我正确的方向.
普通的ADO/OLEDB组件可以使用连接字符串查询Windows搜索服务:
provider=Search.CollatorDSO.1;EXTENDED PROPERTIES="Application=Windows"
Run Code Online (Sandbox Code Playgroud)
一个示例查询:
SELECT TOP 100000 "System.ItemName",
"System.ItemNameDisplay",
"System.ItemType",
"System.ItemTypeText",
"System.Search.EntryID",
"System.Search.GatherTime",
"System.Search.HitCount",
"System.Search.Store",
"System.ItemUrl",
"System.Filename",
"System.FileExtension",
"System.ItemFolderPathDisplay",
"System.ItemPathDisplay",
"System.DateModified",
"System.ContentType",
"System.ApplicationName",
"System.KindText",
"System.ParsingName",
"System.SFGAOFlags",
"System.Size",
"System.ThumbnailCacheId"
FROM "SystemIndex"
WHERE CONTAINS(*,'"Contoso*"',1033)
Run Code Online (Sandbox Code Playgroud)
您可以尝试运行以下命令直接在SQL Server Management …
我的开发团队遇到问题,在Windows 7中为我们自己的自定义文件显示搜索结果的文本片段(请注意,我们不是在讨论使用IPreviewHandler接口的预览窗格).我对.txt文件的一个例子如下所示:
此处显示的带有突出显示结果的文本片段不会显示在我们自己的文件中,只显示文件的名称.
我们已经为我们的文件实现了IFilter,这正确地索引文件内容(搜索返回正确的结果).它只是不会显示片段并突出显示搜索词.
我们怀疑它可能与cwcStartSource和IFilter中STAT_CHUNK的cwcLenSource值有关,但是将它们设置为不同的值到目前为止还没有产生任何结果.
有没有其他人有类似的经历或有任何想法?
提前致谢.
我要求在给定位置搜索指定内容的文件.这些文件将通过Web应用程序(可能不一定在同一台服务器上)进行搜索,并且应该近乎实时更新.
在浏览了扫描工具/代码之后,我找到了这个答案,表明您可以通过编程方式挂钩Windows内置的Windows搜索功能.
使用下面的代码(或多或少的答案代码和一些小调整),我已经能够在我的机器上成功地完成这项工作:
public class WindowsSearchScanner
{
private const string Query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:{0}' and FREETEXT('{1}')";
public void DoSearch(string criteria, string path)
{
string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
string query = string.Format(Query, path, criteria);
OleDbCommand command = new OleDbCommand(query, connection);
connection.Open();
List<string> result = new List<string>();
OleDbDataReader reader = command.ExecuteReader();
int count = 0;
while (reader.Read())
{
result.Add(reader.GetString(0));
Console.WriteLine(reader.GetString(0));
count++;
}
Console.WriteLine(count + " Records Found"); …
Run Code Online (Sandbox Code Playgroud) 我非常喜欢Sublime Text 2用于其命令调色板的模糊匹配搜索算法,我希望创建类似于通过Windows 7开始菜单搜索运行的东西.
我已经找到了适用于.NET Framework的Windows API代码包,但它似乎只提供了用于在我自己的应用程序中使用现有Windows搜索的API挂钩.
有没有办法修改或替换"开始"菜单搜索用于搜索已安装的应用程序和文件的搜索算法?
我想直接(或间接)从Java查询Windows Vista Search服务.
我知道可以使用search-ms:protocol进行查询,但我想在应用程序中使用结果.
我在Windows Search API中找到了很好的信息, 但没有一个与Java相关.
我认为接受了答案,提供了有关如何实现这一目标的有用和明确的信息.
提前致谢.
编辑
在我将此标记为已接受之前,是否有人有JACOB样本?:)
我正在使用Windows资源管理器命名空间扩展,它是一个虚拟文件系统.关于这一点,我想支持Windows资源管理器中提供的搜索对话框中的搜索.
目前我能够在我所站的文件夹中按名称进行搜索,但我希望能够在整个结构中以及虚拟文件系统的内容中进行搜索,并且由于Windows资源管理器无法执行此操作,因此我需要挂钩自定义搜索提供程序.
由于它是一个虚拟文件系统,如果我可以编写一个自定义UI来显示结果,这将是有益的,但这不是强制性的.
自定义Explorer命名空间扩展是用C#编写的,但不需要包装API.任何指向API文档,商业产品和/或样本的指针都将受到赞赏.
有没有办法忽略某些模式的 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)来完成,但这与优雅相反。
任何帮助,将不胜感激。
一分钱
我正在尝试以编程方式向我的Windows 8搜索索引添加位置(范围).经过一些谷歌搜索,我发现[这里]的代码:
Set objISAdm = CreateObject("Microsoft.ISAdm")
Set objCatalog = objISAdm. GetCatalogByName("MyCatatlog")
Set objScope= objCatalog.AddScope("C:\myfiles",False)
objScope.Alias = "MyCatalogScope"
Run Code Online (Sandbox Code Playgroud)
不幸的是,800A01AD错误提示无法创建对象'Microsoft.ISAdm'.进一步挖掘,似乎上面的代码不适用于Windows 8上的较新版Windows Search.
有谁知道如何使用vb脚本或从命令行?据推测,在Windows 7下工作的东西也适用于Windows 8.
我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用DirectoryInfo.GetDirecotories()。
(a)但我也想添加Windows 7用于搜索的功能,我相信它使用索引。我还在msdn上看到了“ Windows Searching Service”,但是我不确定哪种方法最好,查询索引目录或使用搜索服务,有什么建议吗?(b)我想知道是否有人可以给我一个用C#搜索索引目录的小例子。
提前致谢。
windows-search ×10
search ×4
c# ×3
windows ×2
.net ×1
explorer ×1
filesystems ×1
fuzzy-search ×1
git ×1
ifilter ×1
java ×1
oledb ×1
powershell ×1
vbscript ×1
winapi ×1
windows-7 ×1
winforms ×1