在我的Firestore集合中,每个文档都有一个我用于标签的数组字段。为了简化这种情况,我删除了其他字段。
另一方面,在Android项目中,我有exampleList
如下。
ArrayList<String> exampleList = new ArrayList<String>();
exampleList.add("alan");
exampleList.add("jack");
exampleList.add("frank");
我必须构建一个函数/查询,该函数/查询将给我提供其中exampleList
个项目更为频繁的文档ID。在上面的示例中,输出应为378qjb3mrLckHuI0GO1p
,因为它包含alan
和frank
。 L3qUiqzbglryx66VZ8BD
仅包含alan
。
我当时正在考虑像这样设置功能/查询:
public void searchTags() {
ArrayList<Long> frequencyList = null;
ArrayList<String> exampleList = new ArrayList<String>();
exampleList.add("alan");
exampleList.add("jack");
exampleList.add("frank");
mRef.get()
.addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Store store = documentSnapshot.toObject(Store.class);
for (String tag : store.getTags()) {
for (String item : exampleList) {
if (tag == item) {
frequencyList.add(store.getId());
}
}
}
}
// return the most frequent string of frequencyList
});
return;
}
考虑到我在exampleList
和10.000个商店中可以有1.000个商品,每个商品有20个标签,因此代码必须进行这种比较,例如200.000.000次。真的太多了有更快的方法吗?我可以直接在Firestore中移动查询吗?