我在我的android应用程序中使用parse数据库,我想查询数据库表" candidateDetails"返回所有ParseObjects所在的列"技巧"包含"关键字"。
我能够获取ParseObject,但我也想在此查询中添加ignore-case子句,即它应该返回所有ParseObjects,其中skill包含关键字而不管关键字的大小写。
public List<ParseObject> getCandidates(String keyword) {
List<ParseObject> result=new ArrayList<ParseObject>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("candidateDetails");
query.whereContains("skills", keyword);
try {
result=query.find();
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
答案 0 :(得分:3)
你可以通过两种方式做到这一点。首先, ParseQuery 类包含方法or()
,它将查询列表作为参数。因此,您可以按原样为源字符串创建一个查询,另一个用于小写,最后一个用于大写。就像这样:
public List<ParseObject> getCandidates(String keyword) {
List<ParseObject> result=new ArrayList<ParseObject>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("candidateDetails");
query.whereContains("skills", keyword);
ParseQuery<ParseObject> queryLower = ParseQuery.getQuery("candidateDetails");
queryLower.whereContains("skills", keyword.toLowerCase());
ParseQuery<ParseObject> queryUpper = ParseQuery.getQuery("candidateDetails");
queryUpper.whereContains("skills", keyword.toUpperCase());
ParseQuery<ParseObject> queryCombined = ParseQuery.or(Arrays.asList(query, queryLower, queryUpper));
try {
result=queryCombined.find();
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
此外,您可以使用方法whereMatches(String key, String regex, String modifiers)
,其中一个可能的修饰符为i
,这意味着ignore case
。因此,您可以按如下方式修改查询:
public List<ParseObject> getCandidates(String keyword) {
List<ParseObject> result=new ArrayList<ParseObject>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("candidateDetails");
String pattern = "^.*" + keyword + ".*$";
query.whereMatches("skills", keyword, "i");
try {
result=query.find();
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
答案 1 :(得分:1)
Parse论坛上的一些答案表示不推荐不区分大小写的搜索,因为它价格昂贵,因此无法扩展。
考虑另一种方法。将数据上载到数据库时,请添加包含小写版“candidateDetails”的其他字段。然后使用关键字的小写版本查询该字段。