我正在构建一个Android应用程序,稍后可能还会构建该应用程序的iOS版本和web应用程序。我有一个列表,例如这样:
城市名称 | 州 | 计数器点击次数更多列 | |
---|---|---|---|
达拉斯 | 德克萨斯 | 4||
波士顿 | 马萨诸塞州3 | … | |
纽约市 | 纽约1 | … | |
旧金山 | 加利福尼亚 | 3 | … |
圣地亚哥 | 加利福尼亚3 | … | |
西雅图 | 华盛顿10 | ||
博伊西 | 爱达荷州 | 0… | [/tr>
我正在构建一个Android应用程序,稍后可能还会构建该应用程序的iOS版本和web应用程序。
您可以使用Firebase实现这一点,因为:
Firebase是谷歌开发的一个平台,用于创建移动(iOS和Android)和web应用程序。
我正在寻找如何满足以下要求的解决方案
要回答您的问题,我将使用Cloud Firestore,它是:
Cloud Firestore是一个灵活、可扩展的数据库,用于Firebase和Google Cloud的移动、web和服务器开发。与Firebase实时数据库一样,它通过实时侦听器使您的数据在客户端应用程序之间保持同步,并为移动和网络提供离线支持,因此您可以构建响应式应用程序,无论网络延迟或互联网连接如何,都能正常工作。
让我们开始:
当用户在线时,列表及其数据始终是最新的,并从后端系统(Google Firebase)传输。
你的答案就在上面,"它通过实时监听器使您的数据在客户端应用程序之间保持同步;。因此,您的数据将始终是最新的。
该解决方案需要在iOS/Android设备上运行,如果可能的话,还需要在网站上运行。
它会的,因为Firebase是一个跨平台的解决方案。
键入";D";仅";达拉斯";应显示。
您可以通过使用Query的startAt()方法以非常简单的方式实现这一点:
创建并返回一个新的查询,该查询从相对于查询顺序提供的字段开始。
所以你的查询应该像这样在代码中查找:
ref.collection("cities").orderBy("cityName").startAt(name).endAt(name + "uf8ff");
你也可以查看文档,并从下面的文章中看到我的答案:
- 如何更便宜地筛选Firestore数据
键入";S〃;西雅图、圣地亚哥和旧金山应按此顺序显示,因为;计数器点击";值(值越高,结果越相关)
要解决此问题,可以使用Query的orderBy(字符串字段,Query.Direction Direction)方法:
创建并返回一个新的查询,该查询按指定字段进行额外排序,可以选择降序而不是升序。
因此,您可以根据";计数器点击";。
键入";S〃;达拉斯、波士顿、博伊西也应按此顺序(关于"Counter Clicked")显示在以"开头的单词之后;S";,因为它们包含字母";S〃;在单词中。
不幸的是,Firestore不支持全文搜索。有关Cloud Firestore全文搜索的官方文档是最新的,代表Algolia。
对于Android,请从下面的帖子中看到我的答案:
- 是否可以在FirestoreRecyclerOptions中使用Algolia查询
或者:
- 有办法在Firestore搜索子字符串吗
;计数器点击";按每个用户处理。因此可以选择城市名称,并且每次用户选择城市名称时;计数器点击";应增加1。
这可以使用FieldValue.increment(1)
非常简单地实现,正如我在以下文章中的回答所解释的:
- 建议在Firestore中保存持续时间的方法是什么
过滤器服务应该准备好离线,所以"计数器点击";应该在设备上处理。我不太确定将数据上传回Firebase后端服务器是否有意义,你认为呢?
根据有关离线访问数据的官方文档:
Cloud Firestore支持离线数据持久性。对于Android和iOS,默认情况下会启用离线持久性。对于web,默认情况下会禁用脱机持久性。要启用持久性,请调用enablePersistence方法。
因此,您支持三个平台,是的,将数据上传到服务器是有意义的,因为这样您将始终拥有一致的数据。
如果能容忍打字错误,那就太好了。因此例如键入";Bostn";或";Sen";(公差一个字母)";波士顿";或";桑;应显示。
没有任何内置的Firestore可以帮助您做到这一点。你可以做的是创建一个类型为array的额外字段并在其中进行搜索;Bostn";或";Bston";。
我也有可能有一个facet过滤器,这样我就可以在键入";状态";美国
这也不是Firestore内置的东西,但你肯定可以实现这样的东西。很可能您会考虑定义一些过滤器,并在键入之前使用它们。
如果市场上有专业的解决方案,我对它感兴趣,否则,我需要自己构建它。
当然,Firebase可以帮助您实现您想要的目标,所以我希望我能够为此提供最佳解决方案。