使用Parse搜索查询

时间:2014-03-08 12:32:53

标签: ios sql iphone windows-phone-7 parse-platform

我正在查询解析Databse的大约1000个用户,我必须遍历每个名​​称才能找到其中的一些。这是我的查询代码,

 int count = arrPeopleName.count;
    for (int i =0; i<count; i++) {
         PFQuery *query = [PFUser query];

        [query whereKey:@"username" containsString:[arrPeopleName objectAtIndex:i]];
    }

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {


        NSLog(@"USERS %@",objects);  }];

这里人名数组是带有一些名字的静态数组。所以我想 for循环+ RegEx查询,非常昂贵这里效率较低但我找不到合适的查询,即查找匹配名称。所以如果我在数组中只有 JOH ,我仍然应该 JOHN,JOHNSON 等。

所以对此有任何好的想法。我在想这里有一些批量查询?如果您能建议我更好的解决方案,我们将非常感激。非常感谢所有人。

1 个答案:

答案 0 :(得分:0)

您可以在查询中使用数组:

PFQuery * query = [PFUser query];
[query whereKey:@"username" containedIn:arrPeopleName];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    NSLog(@"USERS %@",objects);  
}];

这将返回所有用户的用户名与arrPeopleName中存储的任何用户名匹配。

<强>更新

在我看来,你有两个选择,因为Parse没有部分匹配的API支持。

  1. Hector在Parse上建议的一个选项是使用beforeSave云代码钩子,您可以将信息拆分为令牌以在另一个字段中存储为数组。这似乎是一种hacky解决方法,但我想它可以工作。这意味着当你将“johnson”存储为用户名时,beforeSave函数会将其分成像“jo”,“joh”,“john”,“johns”,“johnso”,“ohn”,“son”这样的标记。等,并将它们存储在一个数组中。您可以稍后将搜索字符串与此数组中的值进行比较(存储在Parse表中的另一个字段中)。我想这可行,但对我的口味来说似乎有点过于讨厌。

  2. 另一个选择是完全在客户端解决它。正如您所说,正则表达式查询效率不高,并且在较大的数据集上无法很好地扩展。你可以做匹配的客户端,也有一些缓存。

  3. 这两种方法都在Parse的论坛帖子中解释: https://parse.com/questions/partial-match-for-query

    似乎你必须选择两个不好的选择之一。对不起,我无法提供更多帮助。我很想听听你最终的结果!