我知道firebase中沒有WHERE
子句。但是,我們如何在firebase中實現模式搜索,就像我們可以在LIKE
運算符中使用SQL一樣。firebase:在firebase中執行模式搜索
我們如何在firebase中實現以下sql查詢?
SELECT * FROM Customers WHERE City LIKE 's%';
我知道firebase中沒有WHERE
子句。但是,我們如何在firebase中實現模式搜索,就像我們可以在LIKE
運算符中使用SQL一樣。firebase:在firebase中執行模式搜索
我們如何在firebase中實現以下sql查詢?
SELECT * FROM Customers WHERE City LIKE 's%';
的近的解決方案是創建一個由市中服務器端索引(或任何其他領域,你想通過搜索)您的數據的索引腳本的NodeJS。
這將不完全複製LIKE
的行爲,但它可以容易地查詢城市名稱,這可能會消除對該行爲的需要。
這通過寫一個的NodeJS簡單的服務器端腳本典型的做法。想象一下你的用戶數據存儲在/users/data
中的場景。你的腳本看起來像這樣。
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);
});
這個腳本會創建一個這樣的結構:
{
"users": {
"data": {
"Tim": {"hair": "red", "eyes": "green", "city": "Chicago"}
},
"byCity": {
"Chicago": {
"-asd09u12": "Tim"
}
}
}
}
一旦我們索引我們的數據,查詢反對它很簡單,可以通過兩個簡單的做腳步。
var ref = new Firebase("<Your Firebase>.firebaseio.com");
var userDataRef = ref.child('users/data');
var byCityRef = ref.child('users/byCity')
// Load children of /users/byCity/Chicago
byCityRef.child('Chicago').on("child_added", function (snapshot) {
// Find each user's unique ID
var userID = snapshot.val();
// Then load the User's data from /users/data/{ID}
userDataRef.child(userID).once(function (snapshot) {
// userID = "Tim"
// user = {"hair": "red", "eyes": "green", "city": "Chicago"}
var user = snapshot.val();
});
});
現在您擁有近乎實時的Firebase加載速度和強大的查詢功能!
你不行。您需要手動枚舉您的對象並搜索自己。對於可能沒問題的小數據集。但是你會用更大的數據集來燒錄帶寬。
Firebase支持使用優先級的一些有限查詢功能,但仍然不是您要求的。
他們不支持這種廣泛查詢的原因是因爲它們針對速度進行了優化。您應該考慮另一種更適合搜索的服務,如彈性搜索或傳統的RDBMS。
您仍然可以將firebase與其他系統一起使用,以充分利用其優勢 - 接近實時的對象提取和同步。
這不是一個解決方案,但現實... –
我是在同一時間,實現在他們的網站 「的posibility圍繞火力搜索」,你有兩個有趣的帖子:
對於基本querys(如果沒有enouth,見第2部分):
1部分:https://www.firebase.com/blog/2013-10-01-queries-part-one.html
第2部分:https://www.firebase.com/blog/2014-01-02-queries-part-two.html
在第2部分,談談如何實現像SQL就像%任何%' 在恢復,火單獨的基礎對複雜查詢並不好,然後推薦使用elasticsearch:elasticsearch.org。 對我來說有點困惑,需要很多服務來做一些簡單的事情,比如找東西。
Elasticsearch有很多的工具,真的很有趣 你posibilly需要
1:一個的NodeJS腳本在同一臺服務器上運行
2:一個elasticsearch服務運行
3:你的應用程序與客戶端搜索一下。
偉大的答案abe!大約下週我們還會在[博客](https://www.firebase.com/blog/)上發佈關於上下文搜索(LIKE)的文章! – Kato
這怎麼能在客戶端完全完成?我的後端不是寫在Node中的,但是如果我把你的Node腳本放在客戶端上,它會使索引邏輯執行很多次(每個客戶端在線) – parliament