webentwicklung-frage-antwort-db.com.de

Wie führt man eine einfache Suche in einer Zeichenfolge in der Firebase-Datenbank durch?

Ich möchte eine einfache Suche in meiner App erstellen, kann aber nichts über Interwebs darüber finden. Das ist neuer als 2014. Es muss einen besseren Weg geben. Es gibt startAt- und endAt-Funktionen, die jedoch nicht wie erwartet funktionieren und zwischen Groß- und Kleinschreibung unterscheiden. Wie löst ihr dieses Problem? Wie kann diese Funktionalität 2016 noch nicht existieren?

25

In meinem Fall konnte ich ein SQL LIKE auf folgende Weise erreichen:

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

Das in der Abfrage verwendete Zeichen \uf8ff ist ein sehr hoher Codepunkt im Unicode-Bereich (es handelt sich um einen PUA-Code für den privaten Verwendungsbereich). Da es nach den meisten regulären Zeichen in Unicode steht, stimmt die Abfrage mit allen Werten überein, die mit queryText beginnen.

Auf diese Weise konnte ich bei der Suche nach "Fre" die Datensätze mit "Fred, Freddy, Frey" als Wert in der Eigenschaft _searchLastName aus der Datenbank abrufen.

84
Francesco

Diese Frage mag alt sein, aber es gibt einen dokumentierten Weg, um diesen Weg zu erreichen. Sie ist einfach zu implementieren. Zitiert :

Um die Volltextsuche Ihrer Cloud Firestore-Daten zu aktivieren, verwenden Sie einen Suchdienst eines Drittanbieters wie Algolia. Betrachten Sie eine Notiz-App, bei der jede Notiz ein Dokument ist:

Algolia ist Teil Ihres firebase functions und führt alle gewünschten Suchen durch.

// 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);
});

Um die Suche zu implementieren, verwenden Sie am besten Sofortige Suche - Android


Beispiel-Suchbild: GIF

1
Lucem

Firebase hat keine großartigen SQL-Suchvorgänge. Sie können entweder nach Werten/Schlüsseln sortieren oder gleich setzen

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

Beispiele finden Sie unter dem Link oben. Das ist die neueste Dokumentation für Firebase. 

Wenn Sie nach SQL-ähnlichen Suchvorgängen suchen. Dann werfen Sie einen Blick auf die elastische Suche. Dies wird jedoch die Komplexität erhöhen, da Sie eine Plattform benötigen, um sie einsetzen zu können. Dafür könnte ich Heroku oder vielleicht GoogleCloudServers empfehlen

Hier ist ein Blogeintrag über erweiterte Suchfunktionen mit elastischer Suche https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

1
Jemil Riahi

Ich weiß nicht, wie sicher dieser Ansatz ist, aber mit der Firebase-Version 10.2.6 unter Android kann ich Folgendes tun:

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

Es scheint manchmal gut zu funktionieren

0
larrytech