目前我正在尝试从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”返回消息“命令未准备好。”。
Msg 7399,Level 16,State 1,Line 2
链接服务器“TESTSERVER”的OLE DB提供程序“Search.CollatorDSO”报告错误。命令没有准备好 Msg 7350,Level 16,State 2,Line 2
无法从OLE DB提供程序“Search.CollatorDSO”获取链接服务器“TESTSERVER”的列信息。
事情变得更加有趣。虽然链接服务器解决方案无法正常工作,但我能够在CLR函数中包含查询Windows搜索的代码(使用MSDN: Querying the Index Programmatically),并在SQL Server中使用if 成功。然而,这是不太理想的,因为设置它所需的步骤(部署库,配置权限等)。我已经尝试了几个参数设置,没有任何运气。我还尝试启用一些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"
一个示例查询:
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)
您可以尝试运行以下命令直接在SQL Server Management Studio中的SQL Server上尝试查询:
SELECT *
FROM OPENROWSET(
'Search.CollatorDSO',
'Application=Windows',
'SELECT TOP 100 "System.ItemName", "System.FileName" FROM SystemIndex');
这给出了错误:
OLE DB provider "Search.CollatorDSO" for linked server "(null)" returned message "Command was not prepared.".
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Search.CollatorDSO" for linked server "(null)" reported an error. Command was not prepared.
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "Search.CollatorDSO" for linked server "(null)".