有没有办法在Firestore搜索子字符串?

时间:2017-11-04 20:40:50

标签: android firebase google-cloud-firestore

如果有一个名为' 加利福尼亚的字符串'在firestore数据库,我想从Android应用程序搜索' Cali '然后火柱应该让我回到加利福尼亚州。 我该怎么做?

在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'的完整字符串。子。

1 个答案:

答案 0 :(得分:3)

不幸的是,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。但是上面的示例仅适用于小型数据集,它不适用于大型数据集,这是因为下载整个集合来搜索客户端的字段并不实用。在这种情况下,正如official documentation建议:

  

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

有关具体示例,请参阅此 post 的回答。