'Firebase queries "where contains a string"
I'm trying to do a "where" query in Flutter-Firebase to filter by name (if the object name is "Una casa roja" and the user writes "casa", the object must be returned). I don't know who can I do the query. I only have this, but is not what I am looking for:
.where('nombre', isGreaterThanOrEqualTo: nombre, isLessThan: nombre + 'z')
Thanks!
Solution 1:[1]
Firestore doesn't support text-search by default. However, there are a few workarounds.
When you register a new user to your app you can store their username in firestore as an array that includes the possible ways you would search for a user (look at the attached image).

You can do that by splitting the name string.
setSearchParameters(String name) {
List<String> searchOptions = [];
String temp = "";
for (int i = 0; i < name.length; i++) {
temp = temp + name[i];
searchOptions.add(temp);
}
return searchOptions;
}
Then you can query the users collection by searching in that array using arrayContains like this:
await usersCollection
.where('searchOptions', arrayContains: searchText)
.get()
.then((value) =>
value.docs.map((doc) => User.fromSnapShot(doc)).toList());
This solution works for simple cases but if you need advanced search capabilities then you'll have to use a 3rd party service such as Agolia.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | amo |
