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