首页 文章

Cloud Firestore:FAILED_PRECONDITION:查询需要索引

提问于
浏览
0

我在Cloud Firestore中查询了一下,

CollectionReference questionRef = db.collection("collectionName");
        Query query = questionRef.whereEqualTo("field1", "content1")
                .whereEqualTo("field2",content2)
                .orderBy("field3")
                .limit(LIMIT);
        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
        {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task)
            {
                if (task.isSuccessful())
                {
                    for (DocumentSnapshot document : task.getResult())
                    {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                }
                else
                {
                    Log.w(TAG, "Error getting documents.", task.getException());
                }
            }
        });

我收到了错误,但我有一个索引 .

获取文件时出错 . com.google.firebase.firestore.FirebaseFirestoreException:FAILED_PRECONDITION:查询需要索引 . 您可以在以下位置创建:https://console.firebase.google.com/project/exam-package/database/firestore/indexes?create_index = EglxYmFua2xpc3QaCQoFdmFsaWQQAhoNCgl0aW1lc3RhbXAQAxoMCghfX25hbWVfXxAD com.google.firebase.firestore.g.zzs.zza(SourceFile: 100)在com.google.firebase.fire.s.z.zzd.zza上的com.google.firebase.firestore.b.zzd.zza(SourceFile:122),com.google.firebase.fire . 火化网站上的com.google.firebase.firestore.b.zzab.zza(SourceFile:333) com.com.google.firebase.fires. google.firebase.firestore.f.zza $ zzb.zza(SourceFile:73)at com.google.firebase.firestore.g.zzm $ 1.onMessage(SourceFile:77)at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java) :36)ato.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:36)at io.grpc.internal.ClientCallImpl $ ClientStreamListenerImpl $ 1MessagesAvailable.runInContext(ClientCallImpl.java:498)at io.grpc.internal.ContextRunna ble.run(ContextRunnable.java:37)位于java.util.concurrent.Executors上的io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)java.util上的$ RunnableAdapter.call(Executors.java:457) .concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)at at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:636)at com.google.firebase.firestore.g.zza $ zza.run(SourceFile:190)at java.lang.Thread.run(Thread . java:764)引起:io.grpc.StatusException:FAILED_PRECONDITION:查询需要索引 . 您可以在此处创建:https://console.firebase.google.com/project/exam-package/database/firestore/indexes?create_index=EglxYmFua2xpc3QaCQoFdmFsaWQQAhoNCgl0aW1lc3RhbXAQAxoMCghfX25hbWVfXxAD at io.grpc.Status.asException(Status.java:534)at com位于com.google.firebase.firestore.b.zzab.zza的com.google.firebase.firestore.b.zzd.zza(SourceFile:122)上的.google.firebase.firestore.g.zzs.zza(SourceFile:98) (SourceFile:333)com.google.firebase.firestore.f.zzo.zza上的com.google.firebase.firestore.b.zzf.zza(SourceFile:236),位于com.google.firebase的com.google.firebase.firestore.f.zzo.zza(SourceFile:6529) . firestore.f.zzv.zzb(SourceFile:2089)at com.google.firebase.firestore.f.zza $ zzb.zza(SourceFile:73)at com.google.firebase.firestore.g.zzm $ 1.onMessage(SourceFile) :77)ato.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:36)at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:36)at io.grpc.internal.ClientCallImpl $ ClientStreamListenerImpl $ 1MessagesAvailable.runInContext(ClientCallI) mpl.java:498)在io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)at java.util.concurrent.Executors $ RunnableAdapter .call(Executors.java:457)java.util.concurrent.FutureTask.run(FutureTask.java:266)java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)at java.util . concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:636)at com.google.firebase.firestore.g.zza $ zza.run(SourceFile: 190)at java.lang.Thread.run(Thread.java:764)

2 回答

  • 0

    我通过几次尝试得到了答案,

    事实证明,“领域”的顺序和方向确实很重要 .

    在我的情况下:我 Build 了一个索引

    字段1:上升

    filed3:上升

    它不起作用

    索引必须是

    场2:上升

    filed3:上升

    要么

    字段1:上升

    场2:上升

    filed3:上升

    如果你用过

    场2:上升

    filed3:降

    不行 .

    要么

    场2:上升

    字段1:上升

    filed3:上升

    不行 .

  • 0

    我不认为实地订单与上述帖子中提到的方式有关 .

    例如,如果你采取:

    Field1:Asc Field2:Desc

    那它应该工作 . 如果在Field2上使用orderby方法,则将Query.direction显式定义为Desc . 因为默认情况下它是Asc .

    Reference

相关问题