使用firebase实时数据库创建搜索功能

2024-05-06

我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能,类似于 facebook 搜索。

我做了一些研究并承认 Firebase 实时无法使用“文本包含”进行搜索。但我相信必须有一些方法来实现它,例如组合 startAt 或 endAt。

我需要一些关于最佳实践的建议。

数据库结构将如下所示:

Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:

Edited我不确定 startAt 和 endAt 如何工作。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?就像我遇到的下面的问题:

firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
      console.log(snap.val())
    })

The above query will return: enter image description here

我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开头/结尾的字段的特定值。不确定这是否是 startAt/endAt 的用法。


你似乎很困惑startAt带有一个接受开头字符串的函数with一定的值。 Firebase 过滤根本不是这样工作的。

当你这样做时ref('/restaurants').orderByChild('name').startAt('Good'),它做了三件事:

  1. 对所有子节点进行排序restaurants在他们的name value.
  2. 找到第一个开头的Good(或按字典顺序排列的任何内容Good)
  3. 从那时起返回每个孩子

所以你得到了带有名称的子节点Good Restaurant and MCD.

您可以使用startAt and endAt返回一个range子节点,即所有开始的节点with Good。为此,您创建一个从以下位置开始的范围:Good并结束于Good\uF8FF:

ref('/restaurants').orderByChild('name').startAt('Good').endAt('Good\uF7FF')

Since \uF8FF是最后一个已知的 Unicode 字符,此查询返回以例如开头的项目。Good, Goodie, Goodness, 但不是Gooey (since Gooe是在之后Good\uF7FF).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用firebase实时数据库创建搜索功能 的相关文章

随机推荐