如何在没有像 algolia 这样的第三方应用程序的情况下在 flutter firebase 上应用全文搜索
stream: FirebaseFirestore.instance
.collection('cars')
.orderBy('time', descending: true)
.where('name', isEqualTo: test)
.snapshots(),
这就是我尝试搜索的方式,但效果不佳,因为我需要输入我尝试使用 algolia 的文档的全名,但谷歌功能要求升级我的飞机,但现在不是一个选项
来自这个答案( 请注意,这不会表现为全文搜索,而更像是“开头为”搜索):
stream: FirebaseFirestore.instance
.collection('cars')
.orderBy('name', descending: true)
.startAt(test)
.endAt(test+'\uf8ff')
.snapshots(),
关于
'\uf8ff'
:
查询中使用的字符 \uf8ff 是 Unicode 范围中非常高的代码点(它是专用使用区域 [PUA] 代码)。因为它位于 Unicode 中大多数常规字符之后,所以查询会匹配所有以 searchName 开头的值
如果您决定使用本地数据库,则可以使用 sqlite 之上的 moor 库进行全文搜索,并启用 fts5 扩展:https://moor.simonbinder.eu/docs/using-sql/extensions /#fts5
如果您不想使用 algolia 和 typesense 等服务,并且不需要任何人工智能预构建工具,那么我有一个使用列表的简单解决方案。
对于此解决方案,您必须通过用空格和关键字(例如,a,is,with等不必要的单词)分割来添加要在列表中搜索的内容的所有单词,并且不要在查询使用拆分列表的情况下传递字符串带有空格,现在你必须从 flutter firebase sdk 中搜索,如下所示👇代码
_carscollection.where('wordlistfieldname',
arrayContainsAny: carsearchquerylist);
注意:将 wordlistfieldname 更改为 firestore 文档中的数组字段名称,并使用搜索查询字符串的拆分列表并将该列表传递到 arraycontainsany 中