首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Firebase实时数据库Android中实现与.contains(SomeText)相当的功能?

如何在Firebase实时数据库Android中实现与.contains(SomeText)相当的功能?
EN

Stack Overflow用户
提问于 2017-06-14 11:27:31
回答 2查看 2.5K关注 0票数 1

我想让我的用户在我的Firebase实时数据库中搜索一些内容。问题是Firebase查询只允许我使用endAt()和startAt()搜索/过滤结果。例如,假设我的用户搜索"rro“,那么我的搜索视图应该以"Arrow”的形式生成建议(如果在我的数据库中找到Arrow的条目)。

我可以自己在搜索视图中提出建议,但问题是如果提供了"rro“,.startAt()和.endAt()就无法实现/或查找任何内容。我想要像.contains()这样的过滤器;

我如何在Android的Firebase中实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 02:32:42

在这种情况下,我找到了一个更好的答案,那就是不需要创建一个特殊的结构:

代码语言:javascript
复制
FirebaseDatabase.getInstance().getReference("users").orderByChild("LastName").startAt(queryText).endAt(queryText+"\uf8ff");

查询中使用的字符\uf8ff是Unicode范围内的一个非常高的代码点(它是专用使用区域PUA代码)。因为它在Unicode中的大多数常规字符之后,所以查询匹配以queryText开头的所有值。 这样,通过"Fre“进行搜索,我就可以从数据库中获得在LastName属性中以”Freddy,Frey“作为值的记录。

最初的答案是里兹万·汗。链接:https://www.quora.com/How-would-you-search-a-Firebase-Realtime-Database-with-a-substring

票数 3
EN

Stack Overflow用户

发布于 2017-06-14 13:33:24

做这样的结构

代码语言:javascript
复制
- objects
  - UID1:Arrow
  - UID2:Rowboat
  - UID3:Bow
- searchable
  - arrow
    - UID1
  - rrow
    - UID1
  - row
    - UID1
    - UID2
  - ow
    - UID1
    - UID2
    - UID3
  - w
    - UID1
    - UID2
    - UID3
  - rowboat
    - UID2
  - owboat
    - UID2
  - wboat
    - UID2
  - boat
    - UID2
  - oat
    - UID2
  - oa
    - UID2
  - a
    - UID1
    - UID2
  - bow
    -UID3

那么它很容易搜索,只需使用一个查询,如

代码语言:javascript
复制
FirebaseDatabase.getInstance().getReference().child("searchable").orderByKey().startAt(input).endAt(input+"~");

在创建类似箭头的对象时,必须使用.updateChildren(),其中还添加了可搜索项。此外,当箭头更改名称时,您也必须以可搜索的方式进行更新,我建议将所有内容转换为小写,包括搜索文本和可搜索对象的名称。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44543475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档