簡體   English   中英

具有錯字容忍、計數、用戶特定等功能的列表的高級過濾?

[英]Advanced filtering of a list with typo-tolerance, counting, user-specific etc.?

我正在構建一個 Android 應用程序,稍后可能還會構建一個 iOS 版本的應用程序和一個 Web 應用程序。 我有一個列表,例如以這種方式:

城市名稱 狀態 計數器點擊 更多欄目
達拉斯 德克薩斯州 4
波士頓 馬薩諸塞州 3
紐約市 紐約 1
舊金山 加利福尼亞州 3
聖地亞哥 加利福尼亞州 3
西雅圖 華盛頓 10
博伊西 愛達荷州 0

我正在尋找如何滿足以下要求的解決方案:

  • 該列表及其數據始終是最新的,並在用戶在線時從后端系統 (Google Firebase) 傳輸。
  • 該解決方案需要在 iOS / Android 設備上運行,如果可能,還需要在網站上運行。
  • 輸入“D”只應顯示“Dallas”。
  • 鍵入“S”西雅圖、聖地亞哥和舊金山應按此順序顯示,因為“Counter Clicked”值(值越高,結果越相關)
  • 在以“S”開頭的單詞之后,輸入“S”也應按此順序(關於“Counter Clicked”)顯示達拉斯、波士頓、博伊西,因為它們在單詞中包含字母“S”。
  • “點擊計數器”按用戶處理。 因此可以選擇城市名稱,每次用戶選擇城市名稱時,“點擊計數器”應增加 1。
  • 過濾器服務應該是離線准備好的,所以應該在設備上處理“Counter Clicked”。 我不太確定將數據上傳回 Firebase 后端服務器是否有意義,您怎么看?
  • 有錯字容忍度會很棒。 因此,例如鍵入“Bostn”或“Sen”(一個字母的容差)“Boston”或“San ...”應顯示。
  • 我還將有可能擁有一個方面過濾器,以便我可以在輸入美國“州”之一之前進行過濾。

如果市場上有專業的解決方案,我對它感興趣,否則,我需要為自己構建它。

我正在構建一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM