【问题标题】:Access Windows Search index using ASP.NET MVC使用 ASP.NET MVC 访问 Windows 搜索索引
【发布时间】:2010-07-11 23:40:13
【问题描述】:

我正在从 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 为真)。但是,当我从 MVC 控制器调用相同的方法时,它不会返回任何结果 - myDataReader.HasRows 为 false - 使用相同的查询。我的猜测与权限和 IIS 无法访问索引有关。如何让 IIS 访问索引?如何将索引公开给 ASP.NET 网页?如果索引服务器已过时,并且 Windows 搜索不支持此功能,我应该使用什么?

【问题讨论】:

    标签: asp.net-mvc oledb windows-search


    【解决方案1】:

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

    我会从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 是否真的可以替代网站的 Indexing Service。例如,只有一个名为“SystemIndex”的索引包含本地系统上的所有内容。因此,您如何将结果限制在一个网站上?

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

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

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

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

    【讨论】:

    • 我主要认为新的搜索会提高性能,而且似乎很容易切换......但我仍然不清楚 Windows Search 是否打算从网站查询,因为它需要用户登录才能运行(而不是系统服务)。这会让我觉得索引服务更合适。
    • 了解它需要用户登录。我以为我在某个地方的 MSDN 论坛上读到过,但 Windows 搜索概述说即使没有人登录它也会运行。
    • 我不确定 Windows Search 能否真正取代网站索引服务。例如,只有一个名为 SystemIndex 的索引包含本地系统上的所有内容。
    • 我相信你需要使用“企业搜索”或“搜索服务器”,我没有经验。
    • 由于 Indexing ServiceWindows Search 的结果都是 ADO.NET,因此呈现方式没有太大变化。 API 非常不同,您需要进行许多更改。例如,Windows Search 中没有“范围”。我更改了我的个人“桌面搜索”应用程序,但我仍在为我的网站使用 Indexing Service,并且不打算进行任何更改。这样想,DDE 和 DAO 不受支持,但仍随操作系统提供。
    【解决方案2】:

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

    【讨论】:

    • 使用 admin account impersonate 的哪个代码?不是 Network ServiceASP.NET 帐户(您尝试过)吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2012-12-04
    • 2012-09-03
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多