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

问题描述 投票:0回答:2

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

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
2个回答
8
投票

不幸的是,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
。但上述示例仅适用于数据集,它不适用于大型数据集,这是因为下载整个集合来搜索客户端字段是不切实际的。在这种情况下,正如官方文档建议的那样:

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

具体示例,请参阅我的回答post


0
投票

我的项目使用数组。我专门为搜索创建属性。该名称属性是键。我的代码的路径

keys: noteTitle.split(' ').map((key) => key.toLocaleLowerCase()),

为了使用它,我使用这个代码

where('keys', 'array-contains', search.toLocaleLowerCase()),

我希望对你有帮助..thx

© www.soinside.com 2019 - 2024. All rights reserved.