0

CoreData には、テキストの説明である属性フィールド「説明」の 1 つを持つオブジェクトが格納されています。例: description = @"事故による重度の頭部外傷";

この列を任意の順序で正確なフレーズではなく単語で検索する NSPedicate を見つけたいと思います。たとえば、「事故による外傷が深刻」を検索すると、上記の文字列が得られます。

-(void)Fetch(){
.......
NSArray *words = [query componentsSeparatedByString:@" "];
req.predicate = [NSPredicate predicateWithFormat:@"description contains[cd] %@ AND description contains[cd] %@ ...",words[0],words[1],[words[2],...];
.....
//execute fetchRequest
//return NSFetchedResultsController;
}

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
 {
  [self Fetch];
  [self.tableView reloadData];
  }

上記のコードはちょっと機能しますが、contains の代わりに beginwith を使用したいのですが、beginwith が機能していないようです。また、ユーザーが入力できる単語数がわからないため、words[0]、words[1]...などを実行して上記の述語を形成するのは困難です。

ありがとう

4

1 に答える 1

0

文をトークン(単語、または関連する単語のみ)に分割し、そのさまざまなエンティティ(KeyWordなど)を作成できます。そうすれば、モデルにこれらのキーワードの配列が含まれるようになります。次に、クエリを実行して、すべてのトークンまたは少なくとも1つに一致するこれらのモデルをすべて見つけることができます(ただし、検索を実行する必要があります)。

于 2012-11-12T15:46:20.020 に答える