小编And*_*man的帖子

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

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

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

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

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

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

OLEDB工作

普通的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 …

oledb windows-search sql-server-2008-r2 indexing-service

17
推荐指数
1
解决办法
2681
查看次数

OLE DB提供程序"Search.Collat​​orDSO"返回"命令未准备好"

有没有人能够使用SQL Server中的OLE DB Provider for Search连接到Windows Search Service?下面您将找到在Management Studio中配置链接服务器时遇到的错误消息.

链接服务器"TESTSERVER"的OLE DB提供程序"Search.Collat​​orDSO"返回消息"命令未准备好".
消息7399,级别16,状态1,行2
OLE DB提供程序"Search.Collat​​orDSO"用于链接服务器"TESTSERVER"报告错误.命令没有准备好.
消息7350,级别16,状态2,行2
无法从OLE DB提供程序"Search.Collat​​orDSO"获取链接服务器"TESTSERVER"的列信息.

我知道在过去几年中有更多的人一直在努力解决这个问题,但到目前为止我还没有找到解决方案.

sql windows sql-server indexing search

6
推荐指数
1
解决办法
1105
查看次数

使用通配符时,对电子邮件地址列中断的全文搜索

我正在尝试在包含电子邮件地址的表上执行全文搜索.

假设我的表包含电子邮件地址:abbuilder@realestate.com

现在,由于断字符,此电子邮件地址中的句点用作分隔符.默认的SQL Server停止列表可以防止对单个字符建立索引(出于显而易见的原因).

通常不是问题,搜索地址工作得很好.不过,我希望能够搜索部分的地址.

我想通过下面的查询搜索"abbuilder @ real".不幸的是,这不起作用,因为地址没有被编入索引"abbuilder @ real ......".

SELECT*FROM [Addressbook] a WHERE CONTAINS([a].*,'"abbuilder @ real*"')

关于如何解决这个问题的任何建议?关于SQL Fiddle的测试示例.

sql-server full-text-search wildcard sql-server-2012

5
推荐指数
1
解决办法
837
查看次数