2

我正在从 vbscript 升级到 ASP.NET MVC 的项目中。它使用 Microsoft Index Server 在 Windows Server 2003 机器上索引 Word 和 PDF 文件。它只是使用“Provider=\”MSIDXS\”;Data Source=\“docSearch\”;”之类的连接字符串打开了一个 OleDbConnection。

经过一番研究,我了解到索引服务器已过时(“注意索引服务在 Windows XP 中已过时。相反,请使用 Windows 搜索。” - http://msdn.microsoft.com/en-us/library/ms690580) Windows Search 是继任者。
因此,在我的新 MVC 应用程序中,我尝试使用 OleDbConnection 连接字符串,例如“Provider=Search.Collat​​orDSO;Extended Properties=\”Application=Windows\“”。

我有一个接受格式化查询并执行搜索的方法 - 这是使用 OleDb 执行的查询:

string.Format("SELECT System.FileName FROM SystemIndex WHERE CONTAINS('{0}')", query)

现在,当我在测试类中调用我的方法时,它工作正常(即返回结果... myDataReader.HasRows 为真)。但是,当我从 MVC 控制器调用相同的方法时,它不会返回任何结果 - myDataReader.HasRows 为 false - 使用相同的查询。我的猜测与权限和 IIS 无法访问索引有关。如何让 IIS 访问索引?如何将索引公开给 ASP.NET 网页?如果 Index Server 已过时,并且 Windows Search 不支持此功能,我应该使用什么?

4

2 回答 2

2

我不会仅仅因为它不受支持而改变,除非您在索引服务方面遇到特定问题或需要较新版本的功能。

我会从ISearchQueryHelper

该服务是否具有正确的权限?您检查过Windows Search 3.0/4.0 SDK吗?

我看到你在论坛上(http://social.msdn.microsoft.com/Forums/en-US/windowsdesktopsearchdevelopment/thread/7b9eead4-d938-42c6-ba2b-2c238a7706f9

我不确定Windows Search能否真正取代网站索引服务。例如,只有一个名为“SystemIndex”的索引包含本地系统上的所有内容。因此,您如何将结果限制在一个网站上?

我相信您需要使用我没有经验的“企业搜索”或“搜索服务器”。

由于Indexing ServiceWindows Search的结果都是ADO.NET,因此表示方式没有太大变化。API 非常不同,您需要进行许多更改。例如,在Windows Search中没有“范围” 。当我更改我的个人“桌面搜索”应用程序时,需要一个小时才能进行更改,但由于 API 更改,我需要两天时间才能复制索引服务的所有功能。我进行了此更改,因为Windows Search在我的“代码库”中搜索代码片段时更好

对于没有正则表达式或通配符或非标准属性的标准查询,两者执行相同。索引服务总是更快地检索数据,但可能不会执行一些“过于昂贵”的查询。Windows Search检索数据可能需要很长时间,具体取决于查询。通常,这些“长查询”是Indexing Service的“过于昂贵”的查询。“长查询”也可能来自检索未包含在索引中的属性的任何查询。

我仍然在Windows Server 2003上为我的网站使用索引服务,并且不打算进行任何更改,因为它不像我预期的那么容易,也没有令人信服的理由。

于 2010-07-12T00:35:48.097 回答
1

我在这里找到了答案ASP.NET OLEDB code break when deploying on IIS7。通过模拟有权访问索引的用户。

于 2010-07-12T02:17:20.210 回答