Javascript Firestore-阵列中的orderBy最佳匹配包含任何查询

Javascript Firestore-阵列中的orderBy最佳匹配包含任何查询,javascript,firebase,google-cloud-platform,google-cloud-firestore,nosql,Javascript,Firebase,Google Cloud Platform,Google Cloud Firestore,Nosql,我在Firestore中有一个文档集合,其中有一个字段是字符串数组,这些是添加到数据中的标记 用户可以通过选择和取消选择前端上的这些标记来过滤数据,因此我正在执行一个数组,其中包含查询Firestore的任何标记 然后,我根据最佳匹配对结果进行评分,这样匹配更多标记的文档将被排序到顶部,并显示在页面顶部供用户使用 我现在正尝试使用startAfter,以文档快照作为光标和限制,对这些数据进行分页。但我需要确保,当限制没有扩展到默认顺序(按id升序)中的文档时,不会排除得分较高的文档。我不会以任何

我在Firestore中有一个文档集合,其中有一个字段是字符串数组,这些是添加到数据中的标记

用户可以通过选择和取消选择前端上的这些标记来过滤数据,因此我正在执行一个数组,其中包含查询Firestore的任何标记

然后,我根据最佳匹配对结果进行评分,这样匹配更多标记的文档将被排序到顶部,并显示在页面顶部供用户使用

我现在正尝试使用startAfter,以文档快照作为光标和限制,对这些数据进行分页。但我需要确保,当限制没有扩展到默认顺序(按id升序)中的文档时,不会排除得分较高的文档。我不会以任何特定的方式对结果集进行排序

我的问题是,是否有任何方法可以查询Firestore,使其能够按照包含任何查询的数组中匹配的大多数标记对查询结果进行排序,或者如果没有,我如何更改数据模型/逻辑,以便以可伸缩的方式执行此操作

查询整个数据集并自己实现分页似乎不是最实际的解决方案

我的问题是,是否有任何方法可以查询Firestore,使其能够按照包含任何查询的数组中匹配的大多数标记对查询结果进行排序

否,Firestore无法根据列表字段的大小对查询结果排序

我如何更改数据模型/逻辑以实现可扩展性


您可以将列表的大小存储在另一个字段中,并使用该字段进行排序。如果列表发生更改,您必须确保该字段保持最新状态。

数组的大小不是用来计算我对结果排序所依据的分数的大小,而是该数组中与查询数组中包含的项相匹配的项数。因此,文档中的标记可能包含10项。其中2个可能与包含任何查询的数组中的2个项匹配。这将为该查询提供2分,然后我将根据这个数字对结果进行排序,得分更高的元素在返回的数组中的位置更高。仍然不可能,而且更难自己解决。您需要预先计算所有列表值的所有可能组合,并分别存储每个组合的总和。