如何在Android中实现不区分大小写的查询搜索?

5

我正在使用Parse Cloud来存储数据。在这种情况下,我有一个表"MyUser",我想按名称搜索用户(不区分大小写)。

搜索功能正常,但搜索操作不区分大小写。

我需要进行不区分大小写的搜索。

以下是我的代码:

ParseQuery<ParseObject> query = ParseQuery.getQuery("BetsUpUser");
query.whereContains("name", searchData);
query.findInBackground(new FindCallback<ParseObject>() {
     public void done(List<ParseObject> objList,ParseException e) {
       if (e == null) {
          Log.d("score","@@@@Retrieved " + objList.size()+ " scores");

       } else {
          Log.d("score", "@@@Error: " + e.getMessage());
       }
    }
});

Thanks in advance.

3个回答

14

我解决了不区分大小写的字符串解析查询问题。

替换这行代码。

query.whereContains("name", searchData);

query.whereMatches("name", "("+searchData+")", "i"); 

5
随着数据的增长,这个方案将无法承载。它会变得缓慢,最终导致超时并完全停止工作。 - Fosco
大约多少数据后问题会开始出现? - Vihaan Verma
@VihaanVerma 大约5000。 - Akshit Zaveri

2
我也遇到了这个问题,并意识到没有太多的方法来做这件简单的事情。@ardrian提供了另一种有趣的方法,使用JavaScript。对于Java,它几乎是相同的。他建议创建一个小写版本的可搜索字段。它看起来像下面这样:
ParseObject gameScore = new ParseObject("BetsUpUser");
gameScore.put("name", name);
gameScore.put("name_lowercase", name.toLowerCase());
gameScore.saveInBackground();

在搜索时,我们将输入文本转换为小写。这样,我们仍然可以使用whereContains()方法,而且不会对我们产生太大影响。
ParseQuery<ParseObject> query = ParseQuery.getQuery("BetsUpUser");
query.whereContains("name_lowercase", searchData.toLowerCase()); // the only one change
query.findInBackground(new FindCallback<ParseObject>() {
     public void done(List<ParseObject> objList,ParseException e) {
       if (e == null) {
          Log.d("ParseQuery", objList.get(0).get("name"));//name in actual case
       } else {
          Log.d("ParseQuery", e.getMessage());
       }
    }
});

1

在这篇博客中,它是针对iOS的,但我已经将其转换为Android。 - SAndroidD
博客文章是关于云代码的,它可以给你一个想法...在末尾的三行iOS示例是你已经知道如何在Android中实现的。 - Fosco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接