Как оптимизировать запрос между Android Studio и Firestore? - PullRequest
0 голосов
/ 26 апреля 2019

В моей коллекции Firestore каждый документ имеет поле массива, которое я использую для тегов. Для упрощения я удалил остальные поля.

enter image description here enter image description here

С другой стороны, в проекте 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...