Javascript Firebase高级字典搜索

Javascript Firebase高级字典搜索,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我的Firebase里有很多电报键盘,我想提前对键盘的孩子进行词汇搜索,我的意思是在Secend Level Deep中,用户输入, 例如,用户输入rock,我想让每个键盘在开头、中间或结尾都包含rock,在这个示例中,我有3个键盘:morning、rock和rocky 当用户键入rock时,如何获取和console.log:rock和rocky? 我的问题90%由@rymdmaskin解决,但高级词典搜索仍然开放。 equalTo和startAt和endAt不起作用,我需要像contain这样

我的Firebase里有很多电报键盘,我想提前对键盘的孩子进行词汇搜索,我的意思是在Secend Level Deep中,用户输入, 例如,用户输入rock,我想让每个键盘在开头、中间或结尾都包含rock,在这个示例中,我有3个键盘:morning、rock和rocky

当用户键入rock时,如何获取和console.log:rock和rocky? 我的问题90%由@rymdmaskin解决,但高级词典搜索仍然开放。 equalTo和startAt和endAt不起作用,我需要像contain这样的东西,有人说要使用弹性搜索

结构:

规则:

{
  "rules": {
    ".read": true,
    ".write": true,
      "Keyboards" : {
        "$key": {
           ".indexOn": "name"
        }
      }
  }
}
代码:


如果我没弄错的话,你会想做这样的事

结构:

- Keyboards
  - 0
    - name: "rocks"
    - children
      - 0: "id"
      - 1: "desc"
  - 1
    - name: "rocky"
    - children
      - 0: "id"
      - 1: "desc"
规则:

{
  "rules": {
    ".read": true,
    ".write": true,
      "Keyboards" : {
        "$key": {
           ".indexOn": "name"
        }
      }
  }
}
代码:


这就是你要找的吗?

如果我猜对了,你会想做这样的事情

结构:

- Keyboards
  - 0
    - name: "rocks"
    - children
      - 0: "id"
      - 1: "desc"
  - 1
    - name: "rocky"
    - children
      - 0: "id"
      - 1: "desc"
规则:

{
  "rules": {
    ".read": true,
    ".write": true,
      "Keyboards" : {
        "$key": {
           ".indexOn": "name"
        }
      }
  }
}
代码:


这就是您要找的吗?

我的建议是要么更改数据库的结构,要么使用这个似乎已经解决了问题的查询:

.orderByKey().startAt("rock")
我不太确定它是否适用于你未来的所有案例,因为我认为如果你在rocky之后有更多的键盘,查询将从rock开始,但不会在rocky结束。我只是基于这个来源:


我的建议是要么更改数据库的结构,要么使用这个似乎已经解决了问题的查询:

.orderByKey().startAt("rock")
我不太确定它是否适用于你未来的所有案例,因为我认为如果你在rocky之后有更多的键盘,查询将从rock开始,但不会在rocky结束。我只是基于这个来源:


谷歌目前进行全文搜索的方法似乎是与Firebase的Algolia或BigQuery与云函数同步

使用弹性搜索:

谷歌目前进行全文搜索的方法似乎是与Firebase的Algolia或BigQuery与云函数同步

使用弹性搜索:

把这些放在一个字符串中是什么意思?你到底想达到什么目的?你的意思是在某种全局变量中连接每个子节点的内容吗?例如,我有一个图书库名称,当用户在bot中键入rock时,bot将发送包括rock名称在内的所有图书,在本例中,我有rock和rocky,bot应向用户发送2条消息,rock和rocky有一些chid:id,text,photo和..Firebase数据库查询无法搜索深度嵌套的属性。请看我在这里的解释:我还怀疑您正在处理一个分类问题,您的数据结构不可用。请看我在这里的解释:把它们放在一个字符串中是什么意思?你到底想达到什么目的?你的意思是在某种全局变量中连接每个子节点的内容吗?例如,我有一个图书库名称,当用户在bot中键入rock时,bot将发送包括rock名称在内的所有图书,在本例中,我有rock和rocky,bot应向用户发送2条消息,rock和rocky有一些chid:id,text,photo和..Firebase数据库查询无法搜索深度嵌套的属性。请看我在这里的解释:我还怀疑您正在处理一个分类问题,您的数据结构不可用。请看我在这里的解释:您的结构与我的结构相同吗?我已将childs重命名为childs。我的术语为null。这将不起作用。问题在于您的数据结构。所以,如果你想让代码正常工作,你当然需要更新你的数据。是的,对不起,我也不确定你想要实现什么。正如@Orlandster所说,我认为重组数据更好。看一看:我不确定,但您可能可以通过使用以前的代码:orderByKey.startAtrock获取这些值。此外,索引只是一个警告,它不是一个错误,您可以忽略它。您的结构与我的结构相同吗?我已将childs重命名为childs。我的终端为空。这将不起作用。问题在于您的数据结构。所以,如果你想让代码正常工作,你当然需要更新你的数据。是的,对不起,我也不确定你想要实现什么。正如@Orlandster所说,我认为重组数据更好。看一看:我不确定,但您可能可以通过使用以前的代码:orderByKey.startAtrock获取这些值。此外,indexOn只是一个警告,它不是一个错误,您可以忽略它。我还有另一个功能,用于获取rock和rocky的孩子,并在转换后将数据发送给用户。我的问题通过您的代码解决了95%,是否有类似的问题:.orderByKey.containrock,对于词汇搜索,我应该如何实现?我有另一个功能,可以获取rock和rocky的孩子,并在转换后将数据发送给用户。我的问题通过您的代码解决了95%,是否有以下内容:.orderByKey.containrock,对于词汇搜索,我应该如何实现?