В моей коллекции Firestore каждый документ имеет поле массива, которое я использую для тегов. Для упрощения я удалил остальные поля.
С другой стороны, в проекте Android у меня есть exampleList
как показано ниже.
ArrayList<String> exampleList = new ArrayList<String>();
exampleList.add("alan");
exampleList.add("jack");
exampleList.add("frank");
Мне нужно создать функцию / запрос, который дает мне идентификатор документа, в котором элементы exampleList
встречаются чаще. В приведенном выше примере выходные данные должны быть 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;
}
Учитывая, что у меня может быть 1.000 товаров в exampleList
и 10.000 хранилищ с 20 тегами в каждом, код должен выполнить это сравнение 200.000.000 раз. Слишком много. Есть ли более быстрый способ сделать это? Могу ли я переместить запрос непосредственно в Firestore?