【问题标题】:Firebase query search string for a word [duplicate]一个单词的Firebase查询搜索字符串[重复]
【发布时间】:2019-05-21 02:24:38
【问题描述】:

在 firebase 中,如何运行查询以查找字符串中包含特定单词的匹配项?

例如查询所有包含happy这个词的描述。

我可以用 JS 做到这一点,但这意味着我必须加载超过 300 个项目的整个数据库...

干杯!

【问题讨论】:

  • 服务器端查询可以过滤某个子字符串开头的字符串,但不能搜索包含某个子字符串的字符串。见stackoverflow.com/questions/28589092/…
  • 该死,真可惜……所以我唯一的选择是下载整个节点然后用 JS 查询?有什么可以推荐的吗?
  • 如果你想要全文搜索,我会设置一个全文搜索解决方案(ElasticSearch、Algolia 等)。 Firebase 实时数据库更专注于实时数据同步。

标签: node.js string firebase firebase-realtime-database filter


【解决方案1】:

您不必为此下载整个数据库(我假设您在 firestore 上使用实时数据库)。

您可以使用startAt()endAt()equalTo() 等查询方法过滤混合orderByChild()orderByKey()orderByValue() 的数据。

例如,如果您的节点列表 url 是 https://mydb-xxxx.firebaseio.com/parentnode/childnodeslist

可以这样查询:

// Find all nodes whose property myString is "hello"

var ref = firebase.database().ref("parentnode/childnodeslist");
ref.orderByChild("myString").equalTo('hello').once(‘value’).then(function(element){
  console.log(element);
});

see the query dochow to structure your data in firebase

编辑:基于评论:

如果您想进行全文搜索,您可以:

1) 做客户端

// assume "myString" is your param name

var word = 'hello';
var listOfItems = [];
firebase.database().ref("parentnode/childnodeslist").then(function(list){
  listOfItems = list.map(function(item){
    if( item.myString.indexOf(word) >= 0){
      return {id: item.id, word: item.myString}
    }
  })
})

2) 使用第三方工具,例如 ElasticSearch(由 @Frank-van-Puffelen 建议)或 Algolia

3) 使用云函数

【讨论】:

  • 嗨,伊曼纽尔。我知道这种类型的查询,我的问题是“你好”可能是字符串中的第三个/第四个/第十个单词。我需要查询该特定单词并返回包含该单词的所有段落。
  • 最终节点有多深不是问题
  • 只有3深
  • 你可以使用ref('one/two/three')然后用你想要的字符串equalTo('string')查询参数名称orderByChild('param')
  • @hugger 在云函数中,您可以创建一个 REST API,以便获取字符串客户端并在数据库中搜索您想要的任何内容,然后返回结果列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2017-08-14
  • 2019-02-12
相关资源
最近更新 更多