当前位置: 首页 > 面试题库 >

如何也以小写字母搜索Firebase文本?

长孙景天
2023-03-14
问题内容

我正在为我的Android应用程序使用Firebase数据库。我在应用程序中实现了搜索功能。在我的数据库中,仅当我以大写字母“
A”开始搜索时,才会显示每个以“ A”开头的标题。当我输入小写字母“
a”时,未显示任何结果。我也想启用搜索小写字母的变体形式。请帮帮我。谢谢。这是我的搜索代码。

    private void firebaseUserSearch(String searchText) {

    Toast.makeText(Idioms.this, "Started Search", Toast.LENGTH_LONG).show();

    Query firebaseSearchQuery = mUserDatabase.orderByChild("Title").startAt(searchText).endAt(searchText + "\uf8ff");

    FirebaseRecyclerAdapter<Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(

            Blog.class,
            R.layout.bank_row,
            BlogViewHolder.class,
            firebaseSearchQuery
    ) {
        @Override
        protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {

            viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getDescription(), model.getExample());
        }
    };
    mResultList.setAdapter(firebaseRecyclerAdapter);
}

问题答案:

有两种方法可以解决此问题。第一个方法是使用方法甚至从一开始就将项目名称以小写形式存储在数据库中toLowerCase()。因此,如果您想通过小写字母搜索名称,将可以很好地工作。然后,如果您想在活动中不使用名称,并且要大写第一个字母,则只需使用以下代码行:

String firstLetterCapital = lowerCaseItemName.substring(0, 1).toUpperCase() + lowerCaseItemName.substring(1);

因此,如果item使用上述代码,您的商品名称为,则结果将是:Item

第二种方法是将商品的小写名称存储为商品的属性,如下所示:

Firebase-root
    |
    --- items
          |
          --- ItemIdOne
                |
                --- itemName: Item
                |
                --- itemToLowerCase: item

然后,可以使用如下查询来创建搜索:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemsRef = rootRef.child("items");
Query query = itemsRef.orderByChild("itemToLowerCase").startAt(itemName.toLowerCase());


 类似资料:
  • 我正在尝试使用正则表达式将大写字母替换为相应的小写字母。因此 变成 在Sublime的文本中。如何在同时包含小写和大写字母的单词中使用小写字母?所以它会影响维纳斯,而不是维纳斯。

  • 所以,我试着做一个简单的带有开关的菜单。 还要注意:我使用旧版本的Java和NetBeans8.2作为IDE。(因为我的学院一直坚持不使用新的。可能是因为他们还没有课本。),所以可能新的语法不起作用。 我的代码:

  • 目标是从string中获取新的字符串,该字符串没有大写前的小写。在本例中,我们应该得到输出“neyork” 我试图通过ASCII表中大小写字母的位置来实现这一点,但它不起作用。我不确定是否可以通过ASCII表中的位置,以simillar的方式来实现这一点。

  • 我有一个这样设置的索引: 几个重要字段的字段映射设置如下: 当我询问名字时。对字段进行分析后,它适用于至少包含两个字符的任何内容。例如,查询“Ra”将在名称字段中找到带有“Rafael”的文档。然而,当我查询“R”或“Rafael S”时,它不会返回任何结果。应该注意的是,在我们的查询中,空格被处理为“AND”操作符,而不是“OR”,因此基本上查询词被处理为“name contains[searc

  • 问题内容: 我想从Firebase数据库中获取信息,但是它是区分大小写的查询,并且我不希望它区分大小写,是否有一种方法可以使查询在AndroidStudio中不区分大小写, 这是查询代码 问题答案: 使用时,这就是您从函数中学到的东西。它以升序或降序返回数据,并且您无法使用扩展查询自定义结果。 但是,您可以尝试其他可能更昂贵的东西。以数组的形式获取所有想要的子项,并保存Child2及其键。然后,您

  • 以句子大小写返回当前文本的字符串表示形式。句格是在句子中使用大写字母或只大写第一个词和任何专有名词的常规方式。此外,所有大写字都应保持原样。 对于这份作业,名词仅限于开头有一个大写字母的单词。