我想让我的用户在我的Firebase实时数据库中搜索一些内容。问题是Firebase查询只允许我使用endAt()和startAt()搜索/过滤结果。例如,让我的用户搜索" rro" ,然后我的搜索视图应该生成建议为"箭头" (查看我的数据库后,如果找到带箭头的条目)。
我能够自己在searchview中提出建议,但问题是.startAt()和.endAt()无法实现/或找不到任何内容,如果" rro"提供。我希望过滤器像.contains();
如何在Firebase for Android中实现这一目标?
答案 0 :(得分:1)
对于这种情况,我发现了一个更好的答案,不需要创建特殊结构:
FirebaseDatabase.getInstance().getReference("users").orderByChild("LastName").startAt(queryText).endAt(queryText+"\uf8ff");
查询中使用的字符\ uf8ff是一个很高的代码点 Unicode范围(这是专用区域[PUA]代码)。因为它 在Unicode中的大多数常规字符之后,查询将匹配所有 以queryText开头的值。
这样,通过“ Fre”搜索,我可以获得具有“ Fred”的记录, “ Freddy,Frey”作为数据库中LastName属性中的值。
最初的答案是里兹万·汗(Rizwan Khan)。 链接:https://www.quora.com/How-would-you-search-a-Firebase-Realtime-Database-with-a-substring
答案 1 :(得分:0)
制作这样的结构
- 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
然后它很容易搜索,只需使用像
这样的查询FirebaseDatabase.getInstance().getReference().child("searchable").orderByKey().startAt(input).endAt(input+"~");
当您创建像箭头一样的对象时,您必须使用.updateChildren(),您可以在其中添加可搜索的条目。此外,当箭头更改名称时,您必须以可搜索的方式更新,我建议将所有内容转换为小写,搜索文本和可搜索的对象名称。