アプリに検索機能を実装しています。ユーザーが特定のエンティティの複数の属性で単語を同時に検索できるようにしたいと考えています。
以下は、3 つの文字列属性を持つエンティティの例です: Person (firstName, lastName, notes)
3 人でモック データセットを使用してみましょう。
- 「エミリー」、「ブリッジズ」、「彼女はもうすぐ町に着きます。」
- 「ジョニー」、「ウィリアムズ」、「この男は本当にかっこいい」。
- 「ウィル」「スミス」「彼はなぜか何も覚えていない」
ここで、ユーザーが発生"will"を検索していて、大文字と小文字を区別しない検索を実行すると仮定しましょう。orPredicateWithSubpredicatesを使用することで、前述の 3 人全員が「will」という単語に一致します。
理想的には、関連性のために結果を次の順序で表示したいと考えています。
- 「ウィル」「スミス」「彼はなぜか何も覚えていない」
- 「ジョニー」、「ウィリアムズ」、「この男は本当にかっこいい」。
- 「エミリー」、「ブリッジズ」、「彼女はもうすぐ町に着きます。」
この検索機能では、"firstName" は "lastName" よりも関連性が高く、どちらも "notes" 属性よりも関連性があります。
私は UISearchDisplayController を使用しているので、 NSSortDescriptor を必要とする NSFetchedResultsController も使用します。私にとっての問題は、NSSortDescriptor を初期化するためにどの属性/キーを使用するのかということです。
私はすでに多くの投稿を行ってきましたが、一時的なプロパティがこの問題の解決に役立つと考えていましたが、「sortKey」のような名前を付けてこれらに設定できるこの一時的なプロパティをいつどのように設定するかわかりません値:
- 1: 「firstName」の一致の場合
- 2: 「lastName」の一致の場合
- 3:「notes」での対戦の場合
最終的には、3 つの異なるリクエストを実行できると思いますが、NSFetchedResultsController とそのすべての魔法の使用をあきらめる必要があります...
NSFetchedResultsController または何かの限界に達しているかどうかはわかりませんが、ポインターは素晴らしいでしょう、ありがとう!
ジョス。