2012-04-13 40 views
1

我正在嘗試實現一種快速搜索即用型機制。如何爲一個非常大的Core Data數據庫創建一個快速的seach-as-you-type機制?

在我目前的實現中,當用戶第一次啓動應用程序時,他必須等待一小段時間才能完成下載過程。在此期間,應用程序銷售的20,000種產品的信息正在下載。每個產品都由一個NSManagedObject實例表示,並被添加到核心數據數據庫中。

真正的問題是如何使用這些產品。用戶再次啓動應用程序(而不是第一次)後,需要將產品加載到內存中,以便快速搜索。 爲了做到這一點,我循環遍歷整個數據庫,併爲包含其信息的每個產品創建一個NSDictionary實例,因爲在我的程序中使用字典對象來檢索有關產品的信息要容易得多。

由於字典存儲在內存中,因此搜索過程非常快,但是遍歷20,000個對象(每次啓動時會響應)並創建字典需要大量時間(大約一分鐘),因此解決方案是不好。

我想過另一種達到快速搜索目標的方法:在輸入每個字母后從數據庫中提取對象。但我不知道它會有多快。

推薦的方法是什麼?

感謝, Sagiftw

+0

搜索結果如何?它是按產品名稱匹配的文本搜索嗎? – 2012-04-13 09:23:37

+0

搜索使用NSPredicate完成。搜索是coMplex:除了搜索搜索到的文本是否與產品名稱匹配外,我還檢查搜索到的文本是否與產品的製造商匹配,或者是否包含有關產品尺寸,數量,價格等的信息。 – Sagiftw 2012-04-13 20:20:52

+0

您是否考慮在包含匹配關鍵字的可搜索實體上使用額外的字符串屬性?這會讓你查詢匹配的那個屬性,而不是許多索引字段。種子數據時,您可以填充該屬性。 – codeclash 2012-04-14 00:50:48

回答

2

我有一個類似的功能在我的應用程序,但有相當少的記錄。我在所有搜索字段上都有索引,並且從輸入(僅用於搜索的第二個fetchedResultsController)創建儘可能簡單(便宜)的sql查詢(NSPredicate)。結果集包含「搜索項目」。對於大約1000個條目(測試數據大小),這至少足夠快,並具有隨機分佈的文本類型搜索關鍵字。它可能是一個好主意,在後臺獲取以防止gui無響應。

+0

這是一個好主意,在後臺獲取,但我不知道它會多快與20K項目數據庫。 – Sagiftw 2012-04-13 21:33:47

相關問題