【问题标题】:Advanced search with Firebase on Android在 Android 上使用 Firebase 进行高级搜索
【发布时间】:2017-09-15 06:44:59
【问题描述】:

阅读 Firebase 文档后,我了解到 NoSql 中的逻辑结构与 SQlite 中的逻辑结构完全不同。我可以使用以下命令进行基本搜索:

orderByChild()orderByKey()orderByValue() 并用 startAt()endAt()equalTo() 过滤。

我正在构建一个类似于圣经的应用程序。 app项目要求有搜索过滤器,如:

  • “开始于”:例如:Exce借出
  • “包含”:例如:Exchent
  • “所有单词”:例如:耶稣相同的
  • 确切的短语:例如:耶稣是一样的

Firebase 实时数据库功能非常适合修复打字错误或缺少文本,一旦所有设备上的广播发生变化,这无疑是一件了不起的事情。

考虑图片:

See the structure of JSON in firebase

  1. 是否可以使用 Firebase 执行这些搜索过滤器?
  2. 使用 Firebase 自己的 API 构建这些过滤器的最佳方法是什么?
  3. 我是否必须对离线数据使用这些相同的过滤器?

【问题讨论】:

  • 这是不可能的。我认为解决方法有限。
  • Firebase 实时数据库没有您描述的文本搜索功能。
  • 是否有任何其他数据库在更改或添加数据时进行广播,在所有设备上进行更改?最好的选择是什么?
  • 是的,您可以执行此类查询。但是,您必须以“NoSQL”的方式进行操作。您可以使用ElasticSearch“按下简单按钮”或制作您自己的搜索引擎。很多取决于您拥有的大量文本。有关一些提示,请参阅 this questionanother question。也可以在代码中过滤。

标签: android sqlite firebase database nosql


【解决方案1】:

在 Firebase 中没有像 LIKE 查询等效项这样的想法。您可以像这样创建一个额外的节点:

"common_queries": {
    "jesus": {
     "0": "awdawdn",
     "1": "oiefpowmfpowmf"
    },
    "eggcelent":{
     "0": "oiefpowmfpowmf"
    }
}

然后你可以查询尝试命中某个键,结果是对其他节点的键的引用。

还有另一种选择,涉及使用startAt() 方法和endAt(),通过添加最后一个文本可搜索值,这是一个great video

我认为 Firebase 是您工具带中的一个工具,在这种情况下,它不是最合适的工具。不要用圆锯钻孔,用钻头就行了。

【讨论】:

  • 用你的小费,它奏效了。我可以通过带来一本书的所有段落并使用 Array 进行单词搜索来进行查询。谢谢!
  • @OséiasRibeiro 太棒了!提示,视频还是“common_queries”节点?
  • paragrafos ----> UHIudiuhiUHRI10 ----> texto: "valor" banco de dados = FirebaseDatabase.getInstance ();参考 = database.getReference ("paragrafos");咨询咨询=reference.orderByChild(“id”)。等于 (msgId);
【解决方案2】:

不,这是不可能的。不幸的是,Firebase 没有提供您在帖子中描述的文本搜索机制,据我所知,没有其他数据库默认提供类似的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2014-04-30
    相关资源
    最近更新 更多