如何在android中解析查询搜索案例不敏感?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在android中解析查询搜索案例不敏感?相关的知识,希望对你有一定的参考价值。

我使用解析云来存储数据。在这种情况下,我在此表中有一个表“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());
       }
    }
});

提前致谢。

答案

我解决了不区分大小写的字符串Parse Query的问题

替换线

query.whereContains("name", searchData);

query.whereMatches("name", "("+searchData+")", "i"); 
另一答案

我也遇到了这个问题,并意识到没有太多方法可以做到这一点。来自@ardrian的Another interesting approach使用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());
       }
    }
});
另一答案

请参阅Parse博客上关于实施可扩展搜索的这篇文章。

http://blog.parse.com/2013/03/19/implementing-scalable-search-on-a-nosql-backend/

基本上,您可以使用afterSave事件在对象上保存可搜索字段(即较低的名称)。

以上是关于如何在android中解析查询搜索案例不敏感?的主要内容,如果未能解决你的问题,请参考以下文章

DataTables案例不敏感搜索问题

如何在Dictionary中通过大小写不敏感的密钥获取原始案例密钥

案例+解读,来自有道大神的17个常用Linux命令深度解析

如何在 Sqlite 中实现重音/变音符号不敏感搜索? [复制]

在 Android 应用中存储敏感信息

在局部敏感散列中搜索