我們有一個圖像文件夾,其中大約有一百萬個圖像。 我們需要編寫一個基於用戶輸入的關鍵字來獲取圖像的程序。 我們需要在搜索時匹配文件名以找到正確的圖像。 尋找任何建議。 由於 Ñ使用c#在本地圖像文件夾中搜索圖像
回答
根據操作系統的不同,我建議您使用索引服務,Windows桌面搜索或最新版本的Windows搜索。這解決了基於關鍵字的文件查找問題,它解決了文件夾內文件數量方面的性能問題,可擴展性和易擴展性。
The DSearch樣品在http://msdn.microsoft.com/en-us/library/dd940335(VS.85).aspx做幾乎完全你想要的,很容易實現。
例如,如果查詢一百萬個文件並需要將文件移動到子文件夾以提高性能,那麼您可以簡單地創建文件夾並移動文件。你不需要改變任何代碼。
如果您需要更改關鍵字的應用方式,例如使用文件摘要屬性的關鍵字,那麼您只需更改查詢。
對於以後的操作系統,甚至不需要安裝任何軟件,因爲搜索功能是操作系統的一部分,可通過OleDB使用。如果您想要使用高級查詢語法(AQS),Microsoft提供了一個類型化庫來訪問COM接口,以便生成查詢索引數據庫的SQL命令。
老實說,所有關於數據庫的其他建議都是浪費時間。
- 在http://social.msdn.microsoft.com/Search/en-US?query=windows+search
相關搜索技術到Windows搜索
MSDN搜索Windows搜索在http://msdn.microsoft.com/en-us/library/bb286798(VS.85).aspx
一個文件夾中搜索一百萬個文件將是禁止緩慢。(見我在Directory file size calculation - how to make it faster?爲目錄文件大小計算響應 - 如何使它更快
我可以在更短的搜索我的硬盤萬〜30萬文件* tabcontrol.cs」,一個第二的第一?查詢時間約爲4000ms和每個查詢,使用不同的搜索詞,第一個需要300-600ms之後。
- 我剛剛從「索引服務」更新爲「Windows搜索」,我可以搜索文件,30萬以上對於「filename:tabcontrol」爲58GB,隨後的搜索時間爲0.13秒到0.26秒。
的看到http://msdn.microsoft.com/en-us/library/dd940335(VS.85).aspx的DSearch樣品,這是多麼容易實現。
在http://blogs.msdn.com/b/coding4fun/archive/2007/01/05/1417884.aspx
「搜索桌面」搜索整個硬盤驅動器文件是一個緩慢,繁瑣的操作。瞭解如何利用Windows桌面搜索API和數據庫快速查找文件。使用Vista內置的搜索功能爲您的應用程序添加創新的新功能,並可用於Windows XP。
保持在一個單獨的站點或子域的圖像。當然,你可能不希望所有的1M文件在一個目錄中。
你需要(至少)三個表數據庫:在數據庫
ImageFile ID Filepath Keyword ID theWord ImageKeyword ImageID KeywordID
存儲所有(圖片&關鍵字)。
您可以使用全文索引搜索單詞,或將每個單詞存儲爲單獨條目。
而且您將無需檢索(或打開)圖像本身就可以更快地訪問元數據(文件名,創建日期等)。
這可能要快得多,因爲依賴的文件系統不是用來在單個文件夾中存儲一百萬個條目。
有Win32 API FindFirstFile,FindNextFile,FindClose:http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx - 可能它們也以某種方式映射到.NET中。使用它們來搜索沒有任何數據庫的圖像。
從文件夾中獲取一百萬個文件名將花費大量時間。我建議你獲取文件名並將它們放入數據庫中。這樣你可以在幾秒鐘內搜索名字而不是幾分鐘。
我對這麼多的圖像的第一個想法是創建一個倒排列表作爲索引。
如果你能夠維護這個列表,它會使搜索速度相對較快,而且你不需要拖動一百萬張圖片,而這些圖片我估計對你來說太耗費時間。
我開始尋找一些倒排列表實現。
這是顯而易見的,但想象它會是一萬張圖片相當緩慢:
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;
}
一個簡單的解決方法是在其中存儲的ID,路徑數據庫,和一個varchar(字符串)字段,您將在其中保留所有關鍵字。 (爲了效率的目的,這可以存儲在不同的表格中)
這樣你就可以按文件名或關鍵字搜索圖像。
只需重命名使用空格分隔的所有影像複製到各自的關鍵字。然後使用操作系統自己的搜索功能。
如果這不起作用,那麼只有尋找更好的解決方案。
- 1. ActionScript:在文件夾中搜索圖像
- 2. android:webservice圖像替換爲本地文件夾中的圖像
- 3. 如何在本地文件夾中使用angular2保存圖像
- 4. Google按照圖像腳本搜索本地圖像
- 5. PHP:使用元數據搜索圖像文件夾?
- 6. 如何在文件夾中按名稱搜索圖像?
- 7. 減少在文件夾中搜索圖像的時間
- 8. 從目標C中的本地文件夾讀取圖像
- 9. 在文件系統中搜索圖像中的文本
- 10. 將位圖圖像源綁定到我的本地文件夾中的圖像
- 11. 從文件夾中檢索ASP.NET圖像
- 12. 從文件夾中檢索圖像:Android
- 13. 從文件夾中檢索圖像
- 14. 自動上傳圖像到谷歌「搜索圖像」使用C#
- 15. OpenCV圖像搜索(C++)
- 16. 如何使用Picasso將圖像下載到本地文件夾
- 17. 陣列圖像使用html2canvas生成文件夾中的圖像
- 18. 在圖片中搜索特定文件夾搜索圖片
- 19. PHP:使用XMLHttpRequest在文件系統中搜索圖像
- 20. 通過文本框搜索圖像
- 21. 從本地服務器文件夾中刪除圖像在php
- 22. 在C#中使用進度欄從文件夾加載圖像?
- 23. 圖片在文件夾中搜索PHP
- 24. 從資源文件夾檢索圖像
- 25. 谷歌圖片搜索使用本地圖像使用Python代碼
- 26. 如何本地化Xcodesets中的xcassets文件夾中的圖像
- 27. 圖像不上傳在本地文件夾在NiceEdit新更新
- 28. 使用codeigniter從文件夾中檢索圖像
- 29. 如何搜索圖像文件
- 30. 捲曲讀取文本文件圖像的URL列表,在Windows圖像保存到本地文件夾
這是一個桌面應用程序或一個網絡應用程序? – egrunin 2010-06-16 15:35:33