[英]Advanced filtering of a list with typo-tolerance, counting, user-specific etc.?
我正在構建一個 Android 應用程序,稍后可能還會構建一個 iOS 版本的應用程序和一個 Web 應用程序。 我有一個列表,例如以這種方式:
城市名稱 | 狀態 | 計數器點擊 | 更多欄目 |
---|---|---|---|
達拉斯 | 德克薩斯州 | 4 | … |
波士頓 | 馬薩諸塞州 | 3 | … |
紐約市 | 紐約 | 1 | … |
舊金山 | 加利福尼亞州 | 3 | … |
聖地亞哥 | 加利福尼亞州 | 3 | … |
西雅圖 | 華盛頓 | 10 | … |
博伊西 | 愛達荷州 | 0 | … |
我正在尋找如何滿足以下要求的解決方案:
如果市場上有專業的解決方案,我對它感興趣,否則,我需要為自己構建它。
我正在構建一個 Android 應用程序,稍后可能還會構建一個 iOS 版本的應用程序和一個 Web 應用程序。
您可以使用Firebase實現這一目標,因為:
Firebase 是由 Google 開發的用於創建移動(iOS 和 Android)和 Web 應用程序的平台。
我正在尋找如何滿足以下要求的解決方案
為了回答您的問題,我將使用Cloud Firestore ,它是:
Cloud Firestore 是一個靈活、可擴展的數據庫,用於 Firebase 和 Google Cloud 的移動、網絡和服務器開發。 與 Firebase 實時數據庫一樣,它通過實時偵聽器使您的數據在客戶端應用程序之間保持同步,並為移動設備和 Web 提供離線支持,因此您可以構建響應式應用程序,無論網絡延遲或互聯網連接如何。
讓我們開始吧:
該列表及其數據始終是最新的,並在用戶在線時從后端系統 (Google Firebase) 傳輸。
您的答案就在上面,“它通過實時偵聽器使您的數據在客戶端應用程序之間保持同步”。 因此,您的數據將始終是最新的。
該解決方案需要在 iOS / Android 設備上運行,如果可能,還需要在網站上運行。
它將,因為 Firebase 是一個跨平台的解決方案。
輸入“D”只應顯示“Dallas”。
您可以通過使用 Query 的startAt()方法以非常簡單的方式實現這一點:
創建並返回一個新的查詢,該查詢從與查詢順序相關的提供的字段開始。
所以你的查詢應該是這樣的代碼:
ref.collection("cities").orderBy("cityName").startAt(name).endAt(name + "\uf8ff");
您還可以查看文檔,並從以下文章中查看我的答案:
鍵入“S”西雅圖、聖地亞哥和舊金山應按此順序顯示,因為“Counter Clicked”值(值越高,結果越相關)
要解決這個問題,您可以使用 Query 的orderBy(String field, Query.Direction direction)方法:
創建並返回一個新的 Query,該 Query 額外按指定字段排序,可選擇按降序而不是升序。
因此,您可以根據“點擊計數器”的數量顯示這些城市。
在以“S”開頭的單詞之后,輸入“S”也應按此順序(關於“Counter Clicked”)顯示達拉斯、波士頓、博伊西,因為它們在單詞中包含字母“S”。
不幸的是,公司的FireStore不支持全文搜索。 關於Cloud Firestore 中全文搜索的官方文檔是最新的,代表 Algolia。
對於 Android,請參閱我在以下帖子中的回答:
要么:
“點擊計數器”按用戶處理。 因此可以選擇城市名稱,每次用戶選擇城市名稱時,“點擊計數器”應增加 1。
這可以使用FieldValue.increment(1)
非常簡單地實現,如我在以下帖子中的回答中所述:
過濾器服務應該是離線准備好的,所以應該在設備上處理“Counter Clicked”。 我不太確定將數據上傳回 Firebase 后端服務器是否有意義,您怎么看?
根據有關離線訪問數據的官方文檔:
Cloud Firestore 支持離線數據持久化。 對於 Android 和 iOS,默認啟用離線持久化。 對於 Web,默認情況下禁用離線持久性。 要啟用持久性,請調用 enablePersistence 方法。
所以您支持三個平台,是的,將數據上傳到服務器是有意義的,因為這樣您將始終擁有一致的數據。
有錯字容忍度會很棒。 因此,例如鍵入“Bostn”或“Sen”(一個字母的容差)“Boston”或“San ...”應顯示。
Firestore 內置的任何東西都無法幫助您解決這個問題。 您可以做的是創建一個數組類型的附加字段並在其中搜索。 所以該數組可能有“Bostn”或“Bston”之類的拼寫錯誤。
我還將有可能擁有一個方面過濾器,以便我可以在輸入美國“州”之一之前進行過濾。
這也不是已經內置的 Firestore,但您可以肯定地實現類似的東西。 您很可能會考慮定義一些過濾器並在輸入之前使用它們。
如果市場上有專業的解決方案,我對它感興趣,否則,我需要為自己構建它。
Firebase 肯定可以幫助您實現您想要的,所以我希望我能夠為此提供最佳解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.