2016-07-27 34 views

回答

54

高級搜索在我來說,我能夠以下列方式部分地實現了SQL LIKE:

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

在查詢中使用的字符\uf8ff是Unicode範圍中的非常高的代碼點(它是私有使用區域[PUA]代碼)。因爲它在Unicode中大多數常規字符之後,查詢匹配以queryText開頭的所有值。

以這種方式,通過「Fre」搜索,我可以從數據庫中獲得具有「Fred,Freddy,Frey」的記錄作爲_searchLastName屬性中的值。

+1

可以這樣做嗎?我沒有看到它記錄,但它適用於我... – brux

+0

我也在整個文檔中尋找這個主題,但沒有發現任何關於它。隨着一些進一步的研究,我發現這是實現LIKE功能而不必使用彈性搜索的「最細微」解決方案。當然,如果您需要更進一步的高級搜索功能,您的主要機會是通過建立彈性搜索解決方案。然而在我的情況下,這個解決方案完美地解決了我的需求。 – Francesco

+0

這太棒了!給我留下了很大的頭痛! – MJQZ1347

1

火力地堡不具有像內置的搜索有很大的SQL。您可以排序值/鍵也可以equalto

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

您可以在上面的鏈接的例子。這是Firebase的最新文檔。

如果您正在尋找像搜索一樣的SQL。然後看看彈性搜索。但是這會增加複雜性,因爲你需要一個平臺來加以實施。對此,我可以推薦的Heroku或可能GoogleCloudServers

這裏是一個博客帖子大約有彈性搜索 https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

+0

這很傷心,但彈性看起來像唯一的答案。謝謝。無論如何,我使用服務器進行訂閱驗證。 –

2

我不知道這種方法的肯定,但使用的火力版本10.2.6 Android上,我可以做這樣的事情:

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

它似乎運作良好,有時

+0

這仍然適用於你? – suulisin

+0

是的,我想。它仍然工作,因爲我使用firebase版本10.0.1我認爲 – larrytech

+0

讓我說我有一個字符串「蘋果智能手機」,我的搜索詞是聰明的,它會返回「蘋果智能手機」基於上面的查詢。 – suulisin

相關問題