android - watcher - update cloud firestore
¿Hay alguna manera de buscar subcadenas en Firestore? (1)
Si hay una Cadena llamada '' California '' en la base de datos de la tienda de incendios y quiero buscar desde la aplicación de Android como '' Cali '', entonces la base de fuego debería devolverme California. ¿Cómo puedo hacer esa consulta?
Tiene alguna función en firestore como,
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")
Pero necesito una función como,
db.collection("cities").whereContain("name", "Cali")
que debería devolver la cadena completa que contiene la subcadena ''Cali''.
Desafortunadamente, no hay ninguna consulta en Firestore que tenga este aspecto:
db.collection("cities").whereContains("name", "Cali")
Pero para los conjuntos de datos pequeños, existe una solución alternativa que puede ayudarlo a resolver esto, que consiste en consultar la base de datos para obtener todos los nombres de ciudades y usar el método
contains()
esta manera:
String str1 = document.getString("yourProperty");
String str2 = "Cali";
boolean b = str1.toLowerCase().contains(str2.toLowerCase());
Si intenta imprimir el valor de
b
, verá que eso es
true
.
Pero los ejemplos anteriores funcionan lo suficientemente bien solo para conjuntos de datos
pequeños
, no funcionan para conjuntos de datos grandes y esto se debe a que descargar una colección completa para buscar campos del lado del cliente no es práctico.
En este caso, como recomienda la
documentación oficial
:
Para habilitar la búsqueda de texto completo de sus datos de Cloud Firestore, use un servicio de búsqueda de terceros como Algolia .
Para un ejemplo concreto, vea también mi respuesta de esta post .