web-dev-qa-db-fra.com

Comment faire une recherche simple en chaîne dans la base de données Firebase?

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?

25
Zigmārs Dzērve

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.

84
Francesco

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

1
Lucem

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

1
Jemil Riahi

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

0
larrytech