asp.net-mvc - 使用 ASP.NET MVC 访问 Windows 搜索索引

标签 asp.net-mvc oledb windows-search

我正在进行的项目正在从 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 搜索是后继者。
因此,在我的新 MVC 应用程序中,我尝试使用 OleDbConnection 和连接字符串(如“Provider=Search.Collat​​orDSO;Extended Properties=\"Application=Windows\””)进行连接。

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

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

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

最佳答案

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

我将从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”的索引,它包含本地系统上的所有内容。因此,如何将结果限制为仅一个网站?

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

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

对于没有正则表达式或通配符或非标准属性的标准查询,两者执行相同。 索引服务始终能够更快地检索数据,但可能不会执行某些“成本太高”的查询。 Windows Search 可能需要很长时间才能检索数据,具体取决于查询。通常,这些“长查询”是索引服务“成本太高”的查询。 “长查询”也可能是由检索索引中未包含的属性的任何查询产生的。

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

关于asp.net-mvc - 使用 ASP.NET MVC 访问 Windows 搜索索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225075/

相关文章:

search - 修改Windows 7的“开始”菜单搜索算法?

c# - 如何使用 OleDbConnection 从 Excel 文件检索数据

c++ - 使用 IFilter C++ 获取 OLE 属性

asp.net-mvc - <添加程序集=“System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35”/>

ASP.NET MVC : How can I render a Control to a Stream?

c# - ASP.net MVC OutputCache 参数优先级 - Duration 与 SQLDependency

asp.net-mvc - 将 Html.ActionLink 与 RouteValues 一起使用

c# - 第二次尝试从数据库读取会抛出异常?

c# - 这些参数有什么问题?

c# - 指定机器名时无法在自己的机器上查询SystemIndex