2010-06-16 147 views
3

我們有一個圖像文件夾,其中大約有一百萬個圖像。 我們需要編寫一個基於用戶輸入的關鍵字來獲取圖像的程序。 我們需要在搜索時匹配文件名以找到正確的圖像。 尋找任何建議。 由於 Ñ使用c#在本地圖像文件夾中搜索圖像

+0

這是一個桌面應用程序或一個網絡應用程序? – egrunin 2010-06-16 15:35:33

回答

2

根據操作系統的不同,我建議您使用索引服務,Windows桌面搜索或最新版本的Windows搜索。這解決了基於關鍵字的文件查找問題,它解決了文件夾內文件數量方面的性能問題,可擴展性和易擴展性。

The DSearch樣品在http://msdn.microsoft.com/en-us/library/dd940335(VS.85).aspx做幾乎完全你想要的,很容易實現。

例如,如果查詢一百萬個文件並需要將文件移動到子文件夾以提高性能,那麼您可以簡單地創建文件夾並移動文件。你不需要改變任何代碼。

如果您需要更改關鍵字的應用方式,例如使用文件摘要屬性的關鍵字,那麼您只需更改查詢。

對於以後的操作系統,甚至不需要安裝任何軟件,因爲搜索功能是操作系統的一部分,可通過OleDB使用。如果您想要使用高級查詢語法(AQS),Microsoft提供了一個類型化庫來訪問COM接口,以便生成查詢索引數據庫的SQL命令。

老實說,所有關於數據庫的其他建議都是浪費時間。

+0

如果關鍵字將被嵌入到文件元數據中,這些方法將起作用。建議數據庫的人正在假設其他情況,並且他希望集中編輯關鍵字。 – egrunin 2010-06-16 15:43:10

+0

@egrunin:您可以將關鍵字存儲在操作系統提供的文件摘要信息中,該信息作爲備用數據流存儲。可以通過Windows資源管理器管理關鍵字。一切都已經提供。 – AMissico 2010-06-16 16:13:47

4
  1. 保持在一個單獨的站點或子域的圖像。當然,你可能不希望所有的1M文件在一個目錄中。

  2. 你需要(至少)三個表數據庫:在數據庫

 
    ImageFile 
     ID 
     Filepath 

    Keyword 
     ID 
     theWord 

    ImageKeyword 
     ImageID 
     KeywordID 
+1

除此之外,您可以散列圖像,以便檢查圖像是否已經存在。不要使用MD5,因爲它可以爲不同的文件產生相同的結果 - 請嘗試使用SHA1或更高版本。 – 2010-06-16 12:56:53

+0

@downvote ?? Sheesh,強硬的人羣。 – egrunin 2010-06-16 15:28:53

+0

@Dominic:當然。你認爲哪種應用會從中受益? – egrunin 2010-06-16 15:32:42

2

存儲所有(圖片&關鍵字)。

您可以使用全文索引搜索單詞,或將每個單詞存儲爲單獨條目。

而且您將無需檢索(或打開)圖像本身就可以更快地訪問元數據(文件名,創建日期等)。

這可能要快得多,因爲依賴的文件系統不是用來在單個文件夾中存儲一百萬個條目。

1

從文件夾中獲取一百萬個文件名將花費大量時間。我建議你獲取文件名並將它們放入數據庫中。這樣你可以在幾秒鐘內搜索名字而不是幾分鐘。

0

我對這麼多的圖像的第一個想法是創建一個倒排列表作爲索引。

如果你能夠維護這個列表,它會使搜索速度相對較快,而且你不需要拖動一百萬張圖片,而這些圖片我估計對你來說太耗費時間。

我開始尋找一些倒排列表實現。

2

這是顯而易見的,但想象它會是一萬張圖片相當緩慢:

public IList<string> GetMatchingImages(string path, string keyword) 
    { 
     var matches = new List<string>(); 

     var images = System.IO.Directory.GetFiles(path); 

     foreach (var image in images) 
     { 
      if (image.Contains(keyword)) 
      { 
       matches.Add(image); 
      } 
     } 

     return matches; 
    } 
0

一個簡單的解決方法是在其中存儲的ID,路徑數據庫,和一個varchar(字符串)字段,您將在其中保留所有關鍵字。 (爲了效率的目的,這可以存儲在不同的表格中)

這樣你就可以按文件名或關鍵字搜索圖像。

0

只需重命名使用空格分隔的所有影像複製到各自的關鍵字。然後使用操作系統自己的搜索功能。

如果這不起作用,那麼只有尋找更好的解決方案。

相關問題