2013-12-23 17 views
5

Ich weiß, dass es keine WHERE Klausel in Firebase gibt. Aber wie können wir die Mustersuche in Firebase implementieren, wie wir es in SQL mit dem Operator LIKE tun können.firebase: implementierende Mustersuche in Firebase

Wie können wir folgende SQL-Abfrage in Firebase implementieren?

SELECT * FROM Customers WHERE City LIKE 's%'; 

Antwort

14

Die Idee

Eine nahe Lösung ist, einen Index Ihrer Daten zu erstellen, die von der Stadt indiziert ist in einer serverseitigen (oder welcher auch immer anderes Feld nach dem Sie suchen mögen) NodeJS Skript.

Dies wird nicht ganz replizieren das Verhalten von LIKE, aber es wird für die einfache Abfrage von Namen der Stadt ermöglichen, die für dieses Verhalten die Notwendigkeit beseitigen können.

Der Knoten Script

Diese Regel über einen einfachen serverseitiges Skript geschrieben in NodeJS erfolgt. Stellen Sie sich ein Szenario vor, in dem Ihre Benutzerdaten in /users/data gespeichert wurden. Dein Skript würde so aussehen.

var ref = new Firebase("<Your Firebase>.firebaseio.com"); 

// A Firebase ref where all our users are stored 
var userDataRef = ref.child('users/data'); 

// A Firebase ref which is where we store our index 
var byCityRef = ref.child("users/byCity"); 

// Then bind to users/data so we can index each user as they're added 
userDataRef.on("child_added", function (snapshot) { 

    // Load the user details 
    var user = snapshot.val(); 

    // Use the snapshot name as an ID (i.e. /users/data/Tim has an ID of "Tim") 
    var userID = snapshot.name(); 

    // Push the userID into users/byCity/{city} 
    byCityRef.child(user.city).push(userID); 

}); 

Dieses Skript wird eine Struktur wie folgt erstellen:

{ 
    "users": { 
    "data": { 
     "Tim": {"hair": "red", "eyes": "green", "city": "Chicago"} 
    }, 
    "byCity": { 
     "Chicago": { 
     "-asd09u12": "Tim" 
     } 
    } 
    } 
} 

Der Kunde Script

Sobald wir unsere Daten indiziert haben, dagegen Abfragen einfach und kann in zwei leicht getan werden Schritte.

Jetzt haben Sie die fast Echtzeit-Ladegeschwindigkeit von Firebase mit leistungsstarken Abfragefunktionen!

+0

Große antwort abe! Wir werden auch einen Beitrag über kontextuelle Suchanfragen (LIKE) auf [dem Blog] (https://www.firebase.com/blog/) haben, ungefähr nächste Woche! – Kato

+1

Wie kann dies vollständig auf der Clientseite erfolgen? Mein Backend wird nicht in Node geschrieben. Wenn ich jedoch Ihr Node-Skript auf den Client lege, führt dies dazu, dass die Indizierungslogik viele Male ausgeführt wird (einmal für jeden Client, der online ist). – parliament

4

Sie können nicht. Sie müssten Ihre Objekte manuell auflisten und selbst suchen. Für einen kleinen Datensatz könnte das ok sein. Aber Sie brennen Bandbreite mit größeren Datensätzen.

Firebase unterstützt einige begrenzte Abfragefunktionen mit Prioritäten, aber immer noch nicht das, wonach Sie fragen.

Der Grund, warum sie breite Abfragen nicht unterstützen, ist, dass sie auf Geschwindigkeit optimiert sind. Sie sollten einen anderen Dienst in Betracht ziehen, der besser für die Suche geeignet ist, wie die elastische Suche oder ein traditionelles RDBMS.

Sie können Firebase weiterhin neben diesen anderen Systemen nutzen, um seine Stärken auszunutzen - nahezu Echtzeit-Objektabruf und -synchronisierung.

+0

dies ist keine lösung, aber die realität ... –

1

ich zugleich bin, Implementierung in ihr site „die posibility rund um die Feuerbasis zu suchen“, haben Sie zwei interessante Beiträge:

Für grundlegende querys (Wenn nicht enouth, siehe Teil 2):

Teil 1: https://www.firebase.com/blog/2013-10-01-queries-part-one.html

Teil 2: https://www.firebase.com/blog/2014-01-02-queries-part-two.html

im Teil 2, redet darüber, wie eine wie sQL 'wie% etwas%' In Lebenslauf zu implementieren, Feuer Base allein ist nicht gut für komplexe Querys dann empfehlen Verwendung in Ergänzung mit elasticsearch: elasticsearch.org. Für mich ist etwas verwirrt, brauche eine Menge Dienste, um etwas Einfaches wie etwas zu tun.

Elasticsearch hat viele Werkzeuge ist wirklich interessant Sie posibilly

brauchen

1: ein NodeJS Skript

2 in demselben Server ausgeführt wird: ein Elasticsearch Dienst läuft

3: Ihre App mit dem Kunden um darüber zu suchen.