查询解析数据库,通过匹配关键字忽略其大小写返回

时间:2015-07-30 04:34:04

标签: android parse-platform

我在我的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;
        }

2 个答案:

答案 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”的其他字段。然后使用关键字的小写版本查询该字段。