Coredata を永続ストアとして使用する iphone 用のエンタープライズ ios アプリケーションに取り組んでいます。いくつかのコア データ エンティティがあり、そのうちの 1 つには 30~ のフィールドがあります。私のデータ セットは、これらの 30 フィールド エンティティの 45,000 を超えています。
検索文字列がオブジェクトの 12 の異なるフィールドのいずれかに一致するクエリを作成する必要があります。私の NSPredicate は基本的に (property == $A) || の大きなネズミの巣です。(otherproperty == $A) ... など $A は私の検索文字列です。
これはかなり悪いので、パフォーマンスの調整を始めたところです。私たちがすべき明らかなことはありますか?複合述語を使用して、各サブ述語を (property == $A) にする方がよいでしょうか?
考え?前もって感謝します。
私の(部分的な)解決策-コアデータに関するwwdcビデオをいくつか見て、基本的にAppleが言ったことをしました。これは、検索トークンを表すために、実際のオブジェクトから別のオブジェクトへの関係を作成することでした。この新しい検索トークン エンティティには、token と weight の 2 つのフィールドがありました。メイン オブジェクトをコアデータに挿入するとき、これらの検索トークンのセットを彼に渡します。クエリを実行するフィールドごとに 1 つの検索トークンと、トークン プロパティの内容は、ある種の正規化された (すべて小文字の) データです。次に、私の述語は単に「ANY searchTokens.token beginwith %@」です。したがって、インデックス付きフィールドで 1 つのテーブルを検索するだけで、where 句の右側で expersions を実行する必要はありません。Coredata は、このように非常に高速に検索されます。
UISearchDisplayController - 検索を実行する前に、N 秒間待機するか、ユーザーが [検索] を押すのを待ちます