【问题标题】:Is there a way to search sub string at Firestore?有没有办法在 Firestore 中搜索子字符串?
【发布时间】:2018-04-17 08:17:40
【问题描述】:

如果在 firestore 数据库中有一个名为“California”的字符串,并且我想从 android 应用程序中搜索为“Cali”,那么 firebase 应该返回给我加利福尼亚。 我该如何查询?

firestore 有一些功能,例如,

db.collection("cities").whereEqualTo("name", "Cali")
 db.collection("cities").whereLessThan("name", "Cali")
 db.collection("cities").whereGreaterThanOrEqualTo("name", "Cali")
 db.collection("cities").whereGreaterThan("name", "Cali")
 db.collection("cities").whereGreaterThanOrEqualTo("name", "Cali")

但我需要一个像as这样的函数,

db.collection("cities").whereContain("name", "Cali")

它应该返回包含“Cali”子字符串的完整字符串。

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    很遗憾,Firestore 中没有如下所示的查询:

    db.collection("cities").whereContains("name", "Cali")
    

    但对于小型数据集,有一种解决方法可以帮助您解决这个问题,即通过查询数据库以获取所有城市名称并使用contains() 方法,如下所示:

    String str1 = document.getString("yourProperty");
    String str2 = "Cali";
    boolean b = str1.toLowerCase().contains(str2.toLowerCase());
    

    如果您尝试打印b 的值,您会看到true。但是上面的例子只适用于 small 数据集,它不适用于大型数据集,这是因为下载整个集合以在客户端搜索字段是不切实际的。在这种情况下,正如official documentation 建议的那样:

    要启用对 Cloud Firestore 数据的全文搜索,请使用第三方搜索服务,例如 Algolia

    对于一个具体的例子,也请参阅我的回答 post

    【讨论】:

    • 您认为我的回答有帮助吗?
    • 虽然这是一种解决方案,但从技术上讲,它并不能回答让 Firestore 查询能够完成这项工作的问题。此外,您提供的某些信息在技术上不正确;在 Android Cloud Firestore API 中,whereEqualTo 等方法确实存在。
    • @WillieChalmersIII 嗨,威利,感谢您对我的回答发表评论。是的,你是对的,我刚刚相应地更新了我的答案。
    • @WillieChalmersIII 希望您重新考虑我的更新答案并收回反对票。如果您认为我的回答可以帮助未来的访客,也请考虑投票。我会很感激的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2020-05-06
    • 2018-01-24
    • 2020-01-31
    • 2014-04-07
    • 2014-05-05
    相关资源
    最近更新 更多