目前我正在尝试从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 …
有没有人能够使用SQL Server中的OLE DB Provider for Search连接到Windows Search Service?下面您将找到在Management Studio中配置链接服务器时遇到的错误消息.
链接服务器"TESTSERVER"的OLE DB提供程序"Search.CollatorDSO"返回消息"命令未准备好".
消息7399,级别16,状态1,行2
OLE DB提供程序"Search.CollatorDSO"用于链接服务器"TESTSERVER"报告错误.命令没有准备好.
消息7350,级别16,状态2,行2
无法从OLE DB提供程序"Search.CollatorDSO"获取链接服务器"TESTSERVER"的列信息.
我知道在过去几年中有更多的人一直在努力解决这个问题,但到目前为止我还没有找到解决方案.
我正在尝试在包含电子邮件地址的表上执行全文搜索.
假设我的表包含电子邮件地址:abbuilder@realestate.com
现在,由于断字符,此电子邮件地址中的句点用作分隔符.默认的SQL Server停止列表可以防止对单个字符建立索引(出于显而易见的原因).
通常不是问题,搜索地址工作得很好.不过,我希望能够搜索部分的地址.
我想通过下面的查询搜索"abbuilder @ real".不幸的是,这不起作用,因为地址没有被编入索引"abbuilder @ real ......".
SELECT*FROM [Addressbook] a WHERE CONTAINS([a].*,'"abbuilder @ real*"')
关于如何解决这个问题的任何建议?关于SQL Fiddle的测试示例.