具有拼写错误容忍度、计数、用户特定等功能的列表高级过滤



我正在构建一个Android应用程序,稍后可能还会构建该应用程序的iOS版本和web应用程序。我有一个列表,例如这样:

计数器点击次数4马萨诸塞州纽约加利福尼亚华盛顿0[/tr>
城市名称 更多列
达拉斯 德克萨斯
波士顿3
纽约市1
旧金山 加利福尼亚 3
圣地亚哥3
西雅图10
博伊西 爱达荷州

我正在构建一个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可以帮助您实现您想要的目标,所以我希望我能够为此提供最佳解决方案。

最新更新