我正在从vbscript升级到ASP.NET MVC的项目。它使用Microsoft Index Server来索引Windows Server 2003计算机上的Word和PDF文件。它只是使用连接字符串打开OleDbConnection,如“Provider = \”MSIDXS \“; Data Source = \”docSearch \“;”。
经过一番研究后,我了解到索引服务器已经过时(“注释索引服务在Windows XP中已经过时。而是使用Windows搜索。” - http://msdn.microsoft.com/en-us/library/ms690580)和Windows搜索是继承者。 /> 因此,在我的新MVC应用程序中,我正在尝试使用OleDbConnection与连接字符串进行连接,例如“Provider = Search.CollatorDSO; Extended Properties = \”Application = Windows \“”。
我有一个接受格式化查询并执行搜索的方法 - 这是使用OleDb执行的查询:
string.Format("SELECT System.FileName FROM SystemIndex WHERE CONTAINS('{0}')", query)
现在,当我在测试类中调用我的方法时,它工作正常(即返回结果... myDataReader.HasRows为true)。但是,当我从我的MVC控制器调用相同的方法时,它返回没有结果 - myDataReader.HasRows为false - 使用相同的查询。我的猜测是与权限和IIS无法访问索引有关。如何让IIS访问索引?如何将索引公开给ASP.NET网页?如果索引服务器已过时,并且Windows搜索不支持此功能,我应该使用什么?
答案 0 :(得分:2)
除非您遇到索引服务的特定问题或需要较新版本的功能,否则我不会因为它不受支持而更改。
我会从ISearchQueryHelper
该服务是否具有正确的权限?您检查过 Windows Search 3.0 / 4.0 SDK 吗?
我不确定 Windows Search 是否可以真正取代网站的索引服务。例如,只有一个名为“SystemIndex”的索引包含本地系统上的所有内容。因此,您如何将结果限制为仅限于网站?
我相信你需要使用“我没有经验的”企业搜索“或”搜索服务器“。
由于索引服务和 Windows搜索的结果都是 ADO.NET ,因此演示文稿不会发生太大变化。 API非常不同,您需要进行许多更改。例如, Windows搜索中没有“范围”。当我更改我的个人“桌面搜索”应用程序时,需要一个小时才能进行更改,但由于API更改,我需要两天时间复制 Indexing Service 所具有的所有功能。我做了这个更改是因为 Windows搜索在我的“代码库”中搜索代码片段时更好
对于没有正则表达式或通配符或非标准属性的标准查询,两者都执行相同的操作。 索引服务始终可以更快地检索数据,但可能无法执行某些“太昂贵”的查询。 Windows搜索可能需要很长时间才能根据查询检索数据。通常,这些“长查询”是索引服务的“过于昂贵”的查询。 “长查询”也可以来自任何检索索引中未包含的属性的查询。
我仍然在 Windows Server 2003 上为我的网站使用索引服务,并且不打算进行任何更改,因为它不像我预期的那样容易没有令人信服的理由。
答案 1 :(得分:1)
我在这里找到了答案ASP.NET OLEDB code breaks when deployed on IIS7。通过模拟有权访问索引的用户。