2010-07-11 58 views
2

我正在從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 Search是後續產品。
因此,在我的新MVC應用程序中,我嘗試使用OleDbConnection來連接像「Provider = Search.Collat​​orDSO; Extended Properties = \」Application = Windows \「」這樣的連接字符串。訪問Windows搜索索引使用ASP.NET MVC

我有一個發生在一個格式化的查詢和執行搜索的方法 - 在這裏是被使用的OleDb執行查詢:

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

現在,當我把我的方法在測試類,它的工作原理罰款(即返回結果... myDataReader.HasRows是真的)。但是,當我從我的MVC控制器調用相同的方法時,它不返回結果 - myDataReader.HasRows爲false - 使用相同的查詢。我的猜測是關於權限和IIS無法訪問索引。我怎樣才能讓IIS訪問索引?如何將索引公開到ASP.NET網頁?如果索引服務器已過時,並且Windows Search不支持此功能,我應該使用什麼?

回答

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搜索真的可以取代索引服務的網站。例如,只有一個名爲「SystemIndex」的索引包含本地系統上的所有內容。因此,你如何將結果限制在一個網站?

我相信你需要使用「企業搜索」或「搜索服務器」,這是我沒有經驗。

由於結果兩個索引服務Windows搜索ADO.NET,表現並沒有太大變化。 API足夠不同,您需要進行很多更改。例如,Windows搜索中沒有「範圍」。當我通過我的個人「桌面搜索」應用程序進行更改時,需要花費一個小時才能完成更改,但由於API更改,需要兩天才能複製我與索引服務所具有的所有功能。因爲Windows搜索是更好的搜索在我的「代碼庫」

對於沒有正規表達式或野生卡或非標準性標準查詢代碼片段時,都執行相同的我做了這個變化。索引服務總是快速檢索數據,但可能不會執行某些「太貴」的查詢。 Windows搜索可能需要很長時間才能根據查詢檢索數據。通常,這些「長查詢」是索引服務的「太貴」查詢。 「長查詢」也可能來自任何查詢,該查詢檢索索引中未包含的屬性。

我仍在使用索引服務的Windows Server 2003在我的網站和不打算做任何改動,因爲它不是我想象的那麼簡單,沒有令人信服的理由這樣做。

+0

我主要以爲新的搜索會提高性能,而且好像很容易切換......但我仍然不清楚Windows Search是否要從網站上查詢,因爲它需要用戶登錄後運行(而不是系統服務)。這會讓我覺得索引服務更合適。 – davekaro 2010-07-12 02:43:30

+0

需要一個用戶才能登錄。我以爲我在某個地方的MSDN論壇上看到了這個消息,但是Windows搜索概述表明它即使在沒有人登錄時也能運行。 – davekaro 2010-07-12 03:07:28

+0

我不確定Windows搜索能夠真正實現替換網站的索引服務。例如,只有一個名爲SystemIndex的索引包含本地系統上的所有內容。 – AMissico 2010-07-12 03:45:54