Firestore - io.grpc.StatusException: FAILED_PRECONDITION: для запроса требуется индекс - PullRequest
0 голосов
/ 04 октября 2019

Я создаю приложение чата с базой данных брандмауэра FireStore со структурой ниже.

enter image description here

Я получаю данные, как указано ниже. Которые возвращают список каналов, которые мой идентификатор пользователя включает в поле «userArray», и извлекают данные «lastUpdatedOn» на основе заданной даты / времени.

registration = fireStoreDb.collection(clsUtility.RootCollections.Channels.toString())
            .whereArrayContains("userArray", loggedInPsno)
            .whereGreaterThanOrEqualTo("lastUpdatedOn", lastChannelUpdateDateTime)
            .orderBy("lastUpdatedOn", Query.Direction.ASCENDING)
            .addSnapshotListener((queryDocumentSnapshots, e) -> {

                if (e != null) {
                    Log.w("loadUsers", "Listen failed.", e);
                    return;
                }

Здесь, в приведенном выше случае, отображается ошибка в Androidlogcat, чтобы создать составной индекс. Создание составного индекса завершено, но по-прежнему выдается то же сообщение об ошибке.

enter image description here

2019-10-04 17: 46: 30.562 26824-27054 /net.jayamsoft.chat W / Firestore: (21.1.1) [Firestore]: прослушивание запросов (каналы, в которых userArray array_contains 90348324 и lastUpdatedOn> = метка времени (секунды = 1570189540, наносекунды = 484000000) в порядке по последнему обновлению, имя ) не удалось: Статус {код = FAILED_PRECONDITION, описание = Для запроса требуется индекс. Вы можете создать его здесь: https://console.firebase.google.com/project/easychat-lthe/database/firestore/indexes?create_composite=Ck5wcm9qZWN0cy9lYXN5Y2hhdC1sdGhlL2RhdGFiYXNlcy8oZGVmYXVsdCkvY29sbGVjdGlvbkdyb3Vwcy9DaGFubmVscy9pbmRleGVzL18QARoNCgl1c2VyQXJyYXkYARoRCg1sYXN0VXBkYXRlZE9uEAEaDAoIX19uYW1lX18QAQ, reason = null} 2019-10-04 17: 46: 30.567 26824-26824 / net.jayamsoft.chat W / loadUsers: прослушивание не выполнено. com.google.firebase.firestore.FirebaseFirestoreException: FAILED_PRECONDITION: для запроса требуется индекс. Вы можете создать его здесь: https://console.firebase.google.com/project/easychat-lthe/database/firestore/indexes?create_composite=Ck5wcm9qZWN0cy9lYXN5Y2hhdC1sdGhlL2RhdGFiYXNlcy8oZGVmYXVsdCkvY29sbGVjdGlvbkdyb3Vwcy9DaGFubmVscy9pbmRleGVzL18QARoNCgl1c2VyQXJyYXkYARoRCg1sYXN0VXBkYXRlZE9uEAEaDAoIX19uYW1lX18QAQ на com.google.firebase.firestore.util.Util.exceptionFromStatus (com.google.firebase: firebase-firestore @@ 21.1.1: 121) на com.google.firebase.firestore.core.EventManager.onError (com.google.firebase: firebase-firestore @@ 21.1.1: 131) по адресу com.google.firebase.firestore.core.SyncEngine.handleRejectedListen (com.google.firebase: firebase-firestore@@ 21.1.1: 378) на com.google.firebase.firestore.core.FirestoreClient.handleRejectedListen (com.google.firebase: firebase-firestore @@ 21.1.1: 307) на com.google.firebase.firestore.remote.RemoteStore.processTargetError (com.google.firebase: firebase-firestore @@ 21.1.1: 551) в com.google.firebase.firestore.remote.RemoteStore.handleWatchChange (com.google.firebase: firebase-firestore @@ 21.1. 1: 436) на com.google.firebase.firestore.remote.RemoteStore.access $ 100 (com.google.firebase: firebase-firestore @@ 21.1.1: 53) на com.google.firebase.firestore.remote.RemoteStore $ 1.onWatchChange (com.google.firebase: firebase-firestore @@ 21.1.1: 176) на com.google.firebase.firestore.remote.WatchStream.onNext (com.google.firebase: firebase-firestore @@ 21.1.1: 108) по адресу com.google.firebase.firestore.remote.WatchStream.onNext (com.google.firebase:firebase-firestore @@ 21.1.1: 38) по адресу com.google.firebase.firestore.remote.AbstractStream $ StreamObserver.lambda $ onNext $ 1 (com.google.firebase: firebase-firestore @@ 21.1.1: 119) по адресу com.google.firebase.firestore.remote.AbstractStream $ StreamObserver $$ Lambda $ 2.run (com.google.firebase: firebase-firestore @@ 21.1.1) на com.google.firebase.firestore.remote.AbstractStream $ CloseGuardedRunner.run(com.google.firebase: firebase-firestore @@ 21.1.1: 67) по адресу com.google.firebase.firestore.remote.AbstractStream $ StreamObserver.onNext (com.google.firebase: firebase-firestore @@ 21.1.1:110) на com.google.firebase.firestore.remote.FirestoreChannel $ 1.onMessage (com.google.firebase: firebase-firestore @@ 21.1.1: 120) на io.grpc.ForwardingClientCallListener.onMessage (ForwardingClientCallListener.java:33)на io.grpc.ForwardingClientCallListener.onMessage (ForwardingClientCallListener.java:33) по адресу io.grpc.internal.ClientCallImpl $ ClientStreamListenerImpl $ 1MessagesAvailable.runInContext (ClientCallImpl.java:563) по адресу io.grpc.internal.ContextRunnable.gun.j.jj ().SerializingExecutor.run (SerializingExecutor.java:123) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:428) в java.util.concurrent.FutureTask.run (FutureTask.java:237) в java. util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:272)в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:607) в com.google.firebase.fireschronuehutor.user$ DelayedStartFactory.run (com.google.firebase: firebase-firestore @@ 21.1.1: 224)

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Перейдя по ссылкам для создания индексов, которые выдает ошибка, вы должны решить свою проблему. Кажется, ошибка требует, чтобы вы создали 2 индекса.

Попытайтесь следовать точным ссылкам из ошибки и разрешите ему создавать индексы.

Это должно работать.

Дайте нам знать.

0 голосов
/ 04 октября 2019

Ключ не должен повторяться в формате JSON для firebase "lastUpdatedOn"

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