3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個贊
從長遠(yuǎn)來看,F(xiàn)irebase將具有更高級的查詢,因此希望它可以直接支持此類操作,而您無需執(zhí)行任何特殊操作。在此之前,您有幾種選擇:
編寫服務(wù)器代碼以處理搜索。 正如您提到的,最簡單的方法是運(yùn)行一些負(fù)責(zé)索引/搜索的服務(wù)器代碼。Firebase具有Node.JS客戶端,因此這是將服務(wù)連接到Firebase的簡便方法。所有數(shù)據(jù)傳輸仍可能通過Firebase進(jìn)行,但是您將編寫一個Node.JS服務(wù),該服務(wù)在Firebase中的某個指定位置監(jiān)視客戶端“搜索請求”,然后通過將結(jié)果集寫回Firebase來“響應(yīng)”??蛻粝M(fèi)。
將索引存儲在Firebase中,客戶端會自動對其進(jìn)行更新。 如果您想變得真正聰明,則可以嘗試實(shí)施一種無服務(wù)器方案,在該方案中,客戶端在寫入數(shù)據(jù)時會自動為其索引。因此,全文搜索的索引將存儲在Firebase中,并且在客戶端寫入時集合中的一個新項目,它將負(fù)責(zé)適當(dāng)?shù)馗滤饕榱诉M(jìn)行搜索,客戶端將直接使用索引來構(gòu)建結(jié)果集。對于要為Firebase中存儲的復(fù)雜對象的一個字段建立索引的簡單情況,這實(shí)際上是很有意義的,但是對于全文搜索而言,這可能會很粗糙。:-)
將索引存儲在Firebase中,并使用服務(wù)器代碼對其進(jìn)行更新。您可以嘗試一種混合方法,將索引存儲在Firebase中,并由客戶端直接用于搜索,但是要讓客戶端更新索引,而不是讓客戶端將索引添加到集合中時就更新索引的服務(wù)器代碼。這樣,當(dāng)服務(wù)器關(guān)閉時,客戶端仍然可以搜索數(shù)據(jù)。在服務(wù)器追上索引之前,它們可能會獲得過時的結(jié)果。
在Firebase進(jìn)行更高級的查詢之前,如果您愿意運(yùn)行一些服務(wù)器代碼,那么#1可能是最好的選擇。:-)

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個贊
Google當(dāng)前進(jìn)行全文搜索的方法似乎正在與Algolia或BigQuery以及帶有Cloud Functions for Firebase的BigQuery進(jìn)行同步。
這是Firebase的Algolia全文搜索集成示例,其BigQuery集成示例可以擴(kuò)展為支持完整搜索。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個贊
只需重新閱讀您的評論,即您的數(shù)據(jù)是靜態(tài)的即可。在這種情況下,不需要選擇選項#2,而使選項#3變得更容易。您仍然需要弄清楚如何構(gòu)建全文搜索索引,將其存儲在Firebase中,并讓客戶端直接查詢它,但是應(yīng)該完全可行。
- 3 回答
- 0 關(guān)注
- 527 瀏覽
添加回答
舉報