¿Cómo hacer una búsqueda simple en cadena en la base de datos de Firebase?

Quiero crear una búsqueda simple en mi aplicación, pero no puedo encontrar nada en interwebs al respecto, eso es más reciente que 2014. Debe haber una mejor manera. Hay funciones startAt y endAt, pero no funcionan como se esperaba y distinguen entre mayúsculas y minúsculas. ¿Cómo resuelven ustedes este problema? ¿Cómo puede esta funcionalidad todavía no existir en 2016?

En mi caso, pude lograr parcialmente un LIKE SQL de la siguiente manera:

databaseReference.orderByChild('_searchLastName') .startAt(queryText) .endAt(queryText+"\uf8ff") 

El caracter \uf8ff utilizado en la consulta es un punto de código muy alto en el rango Unicode (es un código de Área de Uso Privado [PUA]). Debido a que es después de la mayoría de los caracteres normales en Unicode, la consulta coincide con todos los valores que comienzan con queryText .

De esta forma, al buscar por “Fre” pude obtener los registros con “Fred, Freddy, Frey” como valor en la propiedad _searchLastName de la base de datos.

Firebase no tiene una gran SQL como las búsquedas integradas. Puedes ordenar por valores / clave o puedes igualar a

https://firebase.google.com/docs/database/android/retrieve-data

Puede encontrar ejemplos en el enlace de arriba. Esa es la última documentación para firebase.

Si está buscando búsquedas similares a SQL. Luego eche un vistazo a la búsqueda elástica. Pero eso boostá la complejidad ya que necesita una plataforma para ponerlo. Para eso, podría recomendar Heroku o tal vez GoogleCloudServers

Aquí hay una publicación de blog sobre búsquedas avanzadas con búsqueda elástica https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

Esta pregunta puede ser antigua, pero hay una forma documentada de cómo lograrlo de esta manera. Es simple de implementar. Citado :

Para habilitar la búsqueda de texto completo de sus datos de Cloud Firestre, use un servicio de búsqueda de terceros como Algolia. Considere una aplicación para tomar notas en la que cada nota es un documento:

Algolia formará parte de sus firebase functions y hará todas las búsquedas que desee.

 // Update the search index every time a blog post is written. exports.onNoteCreated = functions.firestre.document('notes/{noteId}').onCreate(event => { // Get the note document const note = event.data.data(); // Add an 'objectID' field which Algolia requires note.objectID = event.params.noteId; // Write to the algolia index const index = client.initIndex(ALGOLIA_INDEX_NAME); return index.saveObject(note); }); 

Para implementar la búsqueda, la mejor manera es usar la búsqueda instantánea – Android


Imagen de búsqueda de muestra: GIF

No sé acerca de la certeza de este enfoque, pero al usar Firebase versión 10.2.6 en Android, puedo hacer algo como esto:

 firebaseDatabase.getReference("parent") .orderByChild("childNode") .startAt("[a-zA-Z0-9]*") .endAt(searchString) 

Parece funcionar bien a veces

Yo mi caso usado:

 var query = 'text' databaseReference.orderByChild('search_name') .startAt(`%${query}%`) .endAt(query+"\uf8ff") .once("value") 

De esta manera, buscando por “prueba” pude obtener los registros que tienen “Prueba 1, Concurso, Una prueba” como valor en la propiedad ‘buscar’ de la base de datos.