Firebase高级词典搜索

时间:2017-09-25 17:25:42

标签: javascript firebase firebase-realtime-database

我的Firebase中有很多Telegram键盘,我希望有一个高级词典搜索Keyboards的孩子,我的意思是在Secend Level Deep,用户输入的,<登记/> 例如,用户输入了rock,我希望每个键盘都包含开始中间结束的摇滚,示例我有3个键盘:morningrockrocky

const ref = db.ref('Keyboards/rock');  //keyboard 1
const ref = db.ref('Keyboards/morning');  //keyboard 2
const ref = db.ref('Keyboards/rocky');  //keyboard 3

当用户输入console.log时,如何获得rockrockyrock? 我的问题90%由@rymdmaskin解决但是高级词典搜索仍然是开放的 equalTostartAt以及endAt不起作用,我需要contain之类的东西,有人说使用弹性搜索(https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

结构: enter image description here

规则:

{
  "rules": {
    ".read": true,
    ".write": true,
      "Keyboards" : {
             ".indexOn": "Keyboards"
         }
  }
}

代码:

const ref = db.ref('/');
  ref.child('/').orderByChild('Keyboards').equalTo('rock').on("value", function(snapshot) {
    console.log(snapshot.val());
    key = snapshot.forEach(function(data) {
        console.log(data.key);
    });
});

3 个答案:

答案 0 :(得分:3)

如果我做对了你就想做这样的事情。

结构:

- 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"
        }
      }
  }
}

代码:

const ref = db.ref('/');
  ref.child('Keyboards').orderByChild('name').equalTo('rocks').on("value", function(snapshot) {
    console.log(snapshot.val());
    key = snapshot.forEach(function(data) {
        console.log(data.key);
    });
});

这是你在找什么?

答案 1 :(得分:2)

我的建议是更改数据库上的结构或使用此查询似乎已解决问题:

.orderByKey().startAt("rock")

我不太确定它会适用于您未来的所有案例,因为我认为查询将从 rock 开始,但如果您有更多,则不会在 rock 结束 rocky 之后的键盘。我只是基于这个来源:Common SQL Queries converted for the Firebase Database

enter image description here

答案 2 :(得分:0)

Google目前进行全文搜索的方法似乎与Algolia或BigQuery for Fire Functions for Firebase同步。

用法(弹性搜索): (https://medium.com/joolsoftware/extending-firebase-with-cloud-functions-elasticsearch-129fbbb951e0