如何在 flutter firebase 中进行全文搜索

问题描述 投票:0回答:3

如何在没有像 algolia 这样的第三方应用程序的情况下在 flutter firebase 上应用全文搜索

 stream: FirebaseFirestore.instance
                .collection('cars')
                .orderBy('time', descending: true)
                .where('name', isEqualTo: test)
                .snapshots(),

这就是我尝试搜索的方式,但效果不佳,因为我需要输入我尝试使用 algolia 的文档的全名,但谷歌功能要求升级我的飞机,但现在不是一个选项

firebase flutter dart search google-cloud-firestore
3个回答
1
投票

来自这个答案( 请注意,这不会表现为全文搜索,而更像是“开头为”搜索):

stream: FirebaseFirestore.instance
    .collection('cars')
    .orderBy('name', descending: true)
    .startAt(test)
    .endAt(test+'\uf8ff')
    .snapshots(),

关于

'\uf8ff'

查询中使用的字符 \uf8ff 是 Unicode 范围中非常高的代码点(它是专用使用区域 [PUA] 代码)。因为它位于 Unicode 中大多数常规字符之后,所以查询会匹配所有以 searchName 开头的值


1
投票

如果您决定使用本地数据库,则可以使用 sqlite 之上的 moor 库进行全文搜索,并启用 fts5 扩展:https://moor.simonbinder.eu/docs/using-sql/extensions /#fts5


0
投票

如果您不想使用 algolia 和 typesense 等服务,并且不需要任何人工智能预构建工具,那么我有一个使用列表的简单解决方案。

对于此解决方案,您必须通过用空格和关键字(例如,a,is,with等不必要的单词)分割来添加要在列表中搜索的内容的所有单词,并且不要在查询使用拆分列表的情况下传递字符串带有空格,现在你必须从 flutter firebase sdk 中搜索,如下所示👇代码

_carscollection.where('wordlistfieldname',
arrayContainsAny: carsearchquerylist);

注意:将 wordlistfieldname 更改为 firestore 文档中的数组字段名称,并使用搜索查询字符串的拆分列表并将该列表传递到 arraycontainsany 中

© www.soinside.com 2019 - 2024. All rights reserved.