Je veux créer une recherche simple dans mon application, mais je ne trouve rien sur les interwebs, c'est plus récent que 2014. Il doit y avoir un meilleur moyen. Il existe des fonctions startAt et endAt mais elles ne fonctionnent pas comme prévu et sont sensibles à la casse. Comment avez-vous résolu ce problème? Comment cette fonctionnalité peut-elle encore ne pas exister en 2016?
Dans mon cas, j'ai pu réaliser partiellement un SQL LIKE de la manière suivante:
databaseReference.orderByChild('_searchLastName')
.startAt(queryText)
.endAt(queryText+"\uf8ff")
Le caractère \uf8ff
utilisé dans la requête est un point de code très élevé dans la plage Unicode (il s'agit d'un code de zone d'utilisation privée [PUA]). Comme c'est après la plupart des caractères normaux dans Unicode, la requête correspond à toutes les valeurs commençant par queryText
.
De cette manière, en cherchant par "Fre", je pouvais obtenir les enregistrements ayant "Fred, Freddy, Frey" comme valeur dans la propriété _searchLastName
de la base de données.
Cette question est peut-être ancienne, mais il existe un moyen documenté de parvenir à ce résultat. Elle est simple à mettre en œuvre. Cité :
Pour activer la recherche en texte intégral de vos données Cloud Firestore, utilisez un service de recherche tiers, tel que Algolia. Considérons une application de prise de notes où chaque note est un document:
Algolia fera partie de votre firebase functions
et fera toutes les recherches que vous souhaitez.
// Update the search index every time a blog post is written.
exports.onNoteCreated = functions.firestore.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);
});
Pour mettre en œuvre la recherche, le meilleur moyen consiste à utiliser recherche instantanée - Android
Exemple de recherche d'image: GIF
Firebase n’a pas un excellent SQL comme les recherches intégrées. Vous pouvez trier par valeurs/clé ou
https://firebase.google.com/docs/database/Android/retrieve-data
Vous pouvez trouver des exemples sur le lien ci-dessus. C'est la documentation la plus récente pour firebase.
Si vous recherchez SQL comme recherches. Ensuite, jetez un coup d'œil à la recherche élastique. Mais cela augmentera la complexité puisque vous avez besoin d’une plate-forme pour le mettre. Pour cela, je pourrais recommander Heroku ou peut-être GoogleCloudServers
Voici un article de blog sur les recherches avancées avec recherche élastique https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html
Je ne connais pas la certitude de cette approche, mais en utilisant la version 10.2.6 de Firebase sur Android, je peux faire quelque chose comme ceci:
firebaseDatabase.getReference("parent")
.orderByChild("childNode")
.startAt("[a-zA-Z0-9]*")
.endAt(searchString)
Cela semble bien fonctionner parfois