2012-11-12 62 views
0

我有CoreData存储一个对象,其属性字段为“描述”,它是文本描述。例如描述= @“严重的意外事故引起的头部创伤”;NSpredicate - 以任意顺序搜索单词

我想找到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]; 
    } 

上面的代码有点儿工作,但我想用beginwith而不是包含,beginswith似乎并没有工作。 另外,我不知道用户可以输入多少单词,所以很难通过单词[0],单词[1]等形成上述谓词。

感谢

回答

0

你可以在标记(文字,或者也许只有相关的词)划分句子和创建的那个(如关键字)不同的实体。这样你的模型就会有这些关键字的数组。然后,您可以执行查询来查找与所有令牌匹配的所有这些模型,或者至少一个(但是您想要执行搜索)。

+0

我不太关注。所以,现在我有一个对象(ID,描述,颜色,年龄,身高......)。说明字段是我感兴趣的搜索内容。你的意思是建立另一个实体'KeyWord'来索引描述字段中的每个单词吗?这是我经历的9MB XML文件。谢谢 – SMA2012

+0

是的,这就是我所建议的。任何全文引擎都会创建关键字来匹配如果你仍然想要使用你的方法,可以看一下NSCompounPredicate来创建几个不同的谓词,然后用AND或者OR来合并它们 – LocoMike