使用Windows Search Service和SQL Server 2008 R2进行全文搜索

时间:2014-03-10 16:51:22

标签: sql-server-2008-r2 oledb windows-search indexing-service

目前我正在尝试从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.Collat​​orDSO”返回消息“命令未准备好。”。
  Msg 7399,Level 16,State 1,Line 2
  链接服务器“TESTSERVER”的OLE DB提供程序“Search.Collat​​orDSO”报告错误。命令没有准备好   Msg 7350,Level 16,State 2,Line 2
  无法从OLE DB提供程序“Search.Collat​​orDSO”获取链接服务器“TESTSERVER”的列信息。

事情变得更加有趣。虽然链接服务器解决方案无法正常工作,但我能够在CLR函数中包含查询Windows搜索的代码(使用MSDN: Querying the Index Programmatically),并在SQL Server中使用if 成功。然而,这是不太理想的,因为设置它所需的步骤(部署库,配置权限等)。我已经尝试了几个参数设置,没有任何运气。我还尝试启用一些Search.Collat​​orDSO提供程序选项,例如允许将提供程序实例化为进程内服务器。我目前正在使用以下设置。为了安全起见,我正在使用登录的当前安全上下文。

  • 提供商: Microsoft OLE DB Provider for Search
  • 数据来源: (local)
  • 提供商字符串: Provider=Search.CollatorDSO.1;EXTENDED?PROPERTIES="Application=Windows"
  • 位置: -

此外,我需要搜索网络驱动器,这可以使用共享的Windows库来完成吗?

我知道在过去的几年里,有更多的人一直在努力解决这个问题。我想知道是否有人能够使这个运行起来,或者能指出我正确的方向。

OLEDB工作

正常的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)".  

奖金阅读

0 个答案:

没有答案