以下是我的情况:我正在对我们公司的公共网站进行网站改造。旧网站是在.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()
我无法让这个实际返回任何结果。无论我把它作为搜索标准放在哪里,它都会一直跳到最后。
有人能告诉我我错过了哪一块拼图吗?
答案 0 :(得分:0)
一切都是正确的;我没有得到任何行,因为我已经缩小了systemIndex以查看我想要的子目录,因此在where子句中包含一个范围导致零结果。一旦我把它拿出来,搜索就可以了。
答案 1 :(得分:0)
看起来应该将范围指定为' file:C:\\ ... \\ Web_App',或者添加' @'在查询字符串的开头签名。