当前位置: 首页 > 知识库问答 >
问题:

我怎样才能达到相当于?包含(SomeText)在Firebase实时数据库Android?

乐正德华
2023-03-14

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

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

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

共有2个答案

徐瀚
2023-03-14

制作这样的结构

- 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+"~");

当您创建像箭头这样的对象时,您必须使用. updateUNICEF()在其中添加可搜索的条目。此外,当箭头更改名称时,您必须以可搜索的方式更新,我建议将所有内容转换为小写,您的搜索文本和可搜索的对象名称。

锺离韬
2023-03-14

对于这种情况,我找到了一个更好的答案,不需要创建一个特殊的结构:

FirebaseDatabase.getInstance().getReference("users").orderByChild("LastName").startAt(queryText).endAt(queryText+"\uf8ff");

查询中使用的字符 \uf8ff 是 Unicode 范围中非常高的代码点(它是专用区域 [PUA] 代码)。由于它位于 Unicode 中的大多数常规字符之后,因此查询将匹配以 queryText 开头的所有值。

这样,通过“Fre”进行搜索,我可以从数据库中获得姓氏属性值为“Fred,Freddy,Frey”的记录。

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

 类似资料:
  • 当我使用jsole访问weblogic的mbean时,我只能得到一些关于jvm的信息,比如“java.lang”。但是我想得到的是关于“jdbc”、“jta”、“ejb”、“servlet”... 我想知道是否可以通过服务获得这些指标:jmx:rmi:///jndi/rmi://10.0.99.102:7997/jmxrmi使用用户名和密码。我认为我的配置很可能有错误,但我不知道问题出在哪里。 然

  • 如何获取已设置为ImageView的可绘图文件的名称?

  • 我需要将数据从Firebase实时数据库切换到Firestore DB。我该怎么做? 视频主要关注实时db,但我认为由于我没有激活实时db,它会转到Firestore。但我让它工作的唯一方法是启用实时db。所以我可以在Firebase中插入和读取数据,但我需要它在Firestore中。 任何帮助都是非常感激的。

  • 一种通用方法,可以返回两个参数之间的随机整数,就像ruby使用时所做的那样。 有什么建议吗?

  • 如果我的问题看起来很长,我道歉。我会尽量简明扼要。 问题:编写一个程序,将以千克为单位的估算重量转换为磅。如果用户输入负值,程序应要求玩家重新输入数字。 我创建了三个函数。第一个函数-返回玩家输入第二个函数-返回以磅为单位的权重第三个函数-如果权重为正,返回以磅为单位的值,或者如果值为负,要求另一个输入。 如果相同的值为正数,我的程序将返回正确的值。然而,当我输入一个负浮点数时,我的程序将永远打印

  • 有什么方法可以简化这段代码吗?我正好有一个白色的一块,想要得到它的位置 代码: 瓦片类: 件类: