将MSIDXS搜索转换为网站的Windows搜索服务

时间:2014-03-10 18:01:51

标签: asp.net vb.net search windows-server-2008-r2

以下是我的情况:我正在对我们公司的公共网站进行网站改造。旧网站是在.net framework 3.5上的server 2003上运行的吗?它可能最初建立在2.0框架上。无论如何,旧网站有一个搜索功能,非常适合用户查找与他们感兴趣的主题相关的页面。它使用旧的MSIDXS oledb连接类型...简单代码如下...

Dim odbSearch As New System.Data.OleDb.OleDbConnection("Provider=""MSIDXS"";Data Source=""Proto"";")
Dim cmdSearch As New System.Data.OleDb.OleDbCommand
cmdSearch.CommandText = String.Format("SELECT doctitle, filename, vpath, rank, characterization, size FROM scope() WHERE FREETEXT(Contents, '{0}') ORDER BY rank DESC", searchText)  WHERE CONTAINS(*,'\""" & searchText & "*\""') AND scope='file:C:\...\Web_App' ORDER BY System.ItemPathDisplay DESC

这很有效。但是现在我们将它转​​移到2008 r2服务器,它不再具有MSIDXS索引......或者确实如此,但是对于站点不起作用?我能够打开它,但它从来没有找到任何东西,目录仍然是空的,我读过的所有内容都说这不再是如何在网站上进行搜索。我读到的“新方法”是使用Windows搜索服务。我已经调整了盒子上的服务来“索引”网站的目录,它似乎在目录中有东西......但是,我转换的代码总是返回0.所以新代码看起来像......

Dim odbSearch As New System.Data.OleDb.OleDbConnection("Provider=Search.CollatorDSO.1;Extended Properties='Application=Windows';")
cmdSearch.CommandText = String.Format("SELECT system.title, system.filename, System.ItemPathDisplay FROM SystemIndex WHERE scope='file:C:\...\Web_App'")
Dim rdrSearch As OleDbDataReader = cmdSearch.ExecuteReader()
While rdsSearch.read()

我无法让这个实际返回任何结果。无论我把它作为搜索标准放在哪里,它都会一直跳到最后。

有人能告诉我我错过了哪一块拼图吗?

2 个答案:

答案 0 :(得分:0)

一切都是正确的;我没有得到任何行,因为我已经缩小了systemIndex以查看我想要的子目录,因此在where子句中包含一个范围导致零结果。一旦我把它拿出来,搜索就可以了。

答案 1 :(得分:0)

看起来应该将范围指定为' file:C:\\ ... \\ Web_App',或者添加' @'在查询字符串的开头签名。