我想让我的用户在我的Firebase实时数据库中搜索一些内容。问题是Firebase查询只允许我使用endAt()和startAt()搜索/过滤结果。例如,假设我的用户搜索"rro“,那么我的搜索视图应该以"Arrow”的形式生成建议(如果在我的数据库中找到Arrow的条目)。
我可以自己在搜索视图中提出建议,但问题是如果提供了"rro“,.startAt()和.endAt()就无法实现/或查找任何内容。我想要像.contains()这样的过滤器;
我如何在Android的Firebase中实现这一点?
发布于 2019-02-09 02:32:42
在这种情况下,我找到了一个更好的答案,那就是不需要创建一个特殊的结构:
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
发布于 2017-06-14 13:33:24
做这样的结构
- 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(),其中还添加了可搜索项。此外,当箭头更改名称时,您也必须以可搜索的方式进行更新,我建议将所有内容转换为小写,包括搜索文本和可搜索对象的名称。
https://stackoverflow.com/questions/44543475
复制相似问题