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

问题描述 投票:4回答:3

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

提前致谢。

android search parse-platform
3个回答
14
投票

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

替换线

query.whereContains("name", searchData);

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

2
投票

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

1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.