2012-03-02 81 views
1

我試圖讓一個應用程序,在C#.NET 4.0和WPF,即指標:Lucene.NET結構文件路徑索引解決方案

  1. 文件名( 「的TaskMgr.exe」)
  2. 文件說明( 「Windows任務管理器」)
  3. 絕對父目錄( 「C:\ Windows \ System32下」)

在用戶的計算機上的所有硬盤。

我沒有索引文件的內容 - 只是文件名/路徑/描述。另外請注意,我只索引擴展名爲.DOC,.MP3,.EXE,.CS,.CPP的實用文件。我不會將無擴展文件,自定義擴展,DLL或其他類型的索引編入索引。

我對Lucene完全陌生,我已經閱讀了一些關於如何設計文檔/索引結構的初學者文章。

我在想我的Lucene文檔結構可能是這樣的,每個文件都是一個新文檔,其中包含上面列出的三個字段作爲三個關鍵對值。這是建議嗎? Lucene是正確的選擇嗎?搜索文件名是否是實時的(列表可以沒有太多滯後,動態擴展並與所有可能的文件名和路徑進行契約)?

如果需要統計信息,我的硬盤是450 GB,並且我有681,014個(所有擴展名)文件和165,732個文件夾。

回答

1

這與Lucene完全相同;問題是:你的用戶想要什麼?如果他們搜索「任務」,它是否應該匹配名稱,描述或父目錄中的任何文件?如果是這樣,那麼這可能應該是一個領域。

您的用戶是否希望更具體(例如filename:task)?如果是這樣,那麼你將需要單獨的領域。

另外:您可能想要使用Solr。設置起來更容易,並且可以防止一些常見的陷阱。

+0

無法擁有網絡應用 - 需要成爲桌面應用。據我瞭解,這消除了Solr。 – Jason 2012-03-02 20:43:46

+0

你能否詳細說明一下「如果它應該匹配其中的任何文件名稱,描述或父目錄,它應該都是一個字段?」我沒有使用Lucene的經驗,但我認爲如果我輸入了文件描述的一部分,Lucene可能會返回Document對象,從中我可以訪問文件描述和文件路徑。實際上,如果搜索與描述,名稱或目錄匹配,則需要返回文件。這必須是一個領域......? – Jason 2012-03-02 20:45:58

+0

您可以從許多方面訪問Solr,包括[C#](http://code.google.com/p/solrnet/)。 Lucene查詢是每個字段的,所以你可以讓你的搜索爲'filename:foo description:foo parent:foo',但如果你只有一個字段'everything',那麼你的查詢就是'everything:foo',它可能會更容易。無論哪種情況,您都將收回整個文檔(只要字段已存儲)。 – Xodarap 2012-03-03 13:50:38

1

這是一個rather old article與dotLucene(現在Lucene.net),但非常有用的新手編寫Lucene桌面搜索應用程序。

注意:Lucene.net 3.0 API已經發生了很大的變化,所以只能將它作爲指導。

+0

這是一個很好的資源,謝謝。 – Jason 2012-03-02 23:37:07