Is there a way to search sub string at Firestore?

2020-01-26 11:25发布

If there is a String named 'California' at firestore database and i want to search from android app as 'Cali' then the firebase should return me California. How can i do that query?

There has some function at firestore like,

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")

But i need a function like as,

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

which should return full string that contains 'Cali' substring.

1条回答
手持菜刀,她持情操
2楼-- · 2020-01-26 11:55

Unfortunately, there is no query in Firestore that looks like this:

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

But for small datasets, there is a workaround that can help you solve this, which is by querying the database to get all city names and use contains() method like this:

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

If you'll try to print the value of b, you'll see that is true. But the above examples works well enough only for small datasets, it doesn't work for large datasets and this is because downloading an entire collection to search for fields client-side isn't practical. In this case, as the official documentation recommends:

To enable full text search of your Cloud Firestore data, use a third-party search service like Algolia.

For a concrete example, please also see my answer from this post.

查看更多
登录 后发表回答