[英]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.