使用CloudFireStore和Android Studio实现搜索功能

使用CloudFireStore和Android Studio实现搜索功能,android,google-cloud-firestore,full-text-search,firebaseui,Android,Google Cloud Firestore,Full Text Search,Firebaseui,我正在recyclerview中实现项目搜索。我正在使用Android studio和云Firestore。查找文章时,我遇到以下错误: 原因:io.grpc.StatusException:无效参数:Order by子句不能包含具有相等筛选器的字段 我怎么能不在“ville”上执行orderBy?我不明白 我希望能够以这种方式取得成果。我真正想要的是列表已经从第一个字符的条目中过滤出来了。多谢各位 我的搜索框实际上是一个编辑文本 searchBox.addTextChangedListener

我正在recyclerview中实现项目搜索。我正在使用Android studio和云Firestore。查找文章时,我遇到以下错误:

原因:io.grpc.StatusException:无效参数:Order by子句不能包含具有相等筛选器的字段

我怎么能不在
“ville”
上执行
orderBy
?我不明白

我希望能够以这种方式取得成果。我真正想要的是列表已经从第一个字符的条目中过滤出来了。多谢各位

我的搜索框实际上是一个编辑文本

searchBox.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            Query query = db.collection("RESTO_TABLE").orderBy("ville",Query.Direction.ASCENDING)
                    .whereGreaterThan("ville",s)
                    .whereLessThan("ville",s+"\uf8ff");
            FirestoreRecyclerOptions<RestoModel> Options = new FirestoreRecyclerOptions.Builder<RestoModel>()
                    .setQuery(query,RestoModel.class)
                    .build();
            villeAdapter = new VilleAdapter(Options);
            villeAdapter.startListening();
            recyclerView.setAdapter(villeAdapter);
            }

            @Override
            public void afterTextChanged(Editable s) {
            Query query = db.collection("RESTO_TABLE").orderBy("ville",Query.Direction.ASCENDING)
                    .whereGreaterThan("ville",s)
                    .whereLessThan("ville",s+"\uf8ff");
            FirestoreRecyclerOptions<RestoModel> Options = new FirestoreRecyclerOptions.Builder<RestoModel>()
                    .setQuery(query,RestoModel.class)
                    .build();
            villeAdapter = new VilleAdapter(Options);
            villeAdapter.startListening();
            recyclerView.setAdapter(villeAdapter);

            }
        });
searchBox.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
Query Query=db.collection(“RESTO_TABLE”).orderBy(“ville”,Query.Direction.升序)
.其中大于(“维尔”,s)
.whereLessThan(“ville”,s+“\uf8ff”);
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(查询,RestoModel.class)
.build();
villeAdapter=新villeAdapter(选项);
Villedapter.startListening();
recyclerView.setAdapter(Villedapter);
}
@凌驾
公共无效后文本已更改(可编辑){
Query Query=db.collection(“RESTO_TABLE”).orderBy(“ville”,Query.Direction.升序)
.其中大于(“维尔”,s)
.whereLessThan(“ville”,s+“\uf8ff”);
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(查询,RestoModel.class)
.build();
villeAdapter=新villeAdapter(选项);
Villedapter.startListening();
recyclerView.setAdapter(Villedapter);
}
});
跟踪去堆:

FireStore回收商:onError com.google.firebase.firestore.FirebaseFirestoreException:无效的_参数:Order by子句不能包含具有相等筛选器的字段 位于com.google.firebase.firestore.util.util.exceptionFromStatus(util.java:117) 位于com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166) 位于com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:534) 位于com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:418) 位于com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99) 位于com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562) 位于com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446) 在com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53) 在com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176) 位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108) 位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38) 在com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119) 位于com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(未知来源:4) 位于com.google.firebase.firestore.remote.AbstractStream$CloseGuardRunner.run(AbstractStream.java:67) 在com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110)上 位于com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125) 在io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658) 在io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643) 在io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) 在io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) 位于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) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 位于com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229) 运行(Thread.java:764) 原因:io.grpc.StatusException:无效的_参数:Order by子句不能包含具有相等筛选器的字段 at io.grpc.Status.asException(Status.java:541) 位于com.google.firebase.firestore.util.util.exceptionFromStatus(util.java:115) 位于com.google.firebase.firestore.core.EventManager.onError(EventManager.java:166) 位于com.google.firebase.firestore.core.SyncEngine.removeAndCleanupTarget(SyncEngine.java:534) 位于com.google.firebase.firestore.core.SyncEngine.handleRejectedListen(SyncEngine.java:418) 位于com.google.firebase.firestore.core.MemoryComponentProvider$RemoteStoreCallback.handleRejectedListen(MemoryComponentProvider.java:99) 位于com.google.firebase.firestore.remote.RemoteStore.processTargetError(RemoteStore.java:562) 位于com.google.firebase.firestore.remote.RemoteStore.handleWatchChange(RemoteStore.java:446) 在com.google.firebase.firestore.remote.RemoteStore.access$100(RemoteStore.java:53) 在com.google.firebase.firestore.remote.RemoteStore$1.onWatchChange(RemoteStore.java:176) 位于com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:108) 在com.google.firebase.firestore.remote.WatchStream.onNe
db.collection("RESTO_TABLE")
  .orderBy("ville")
  .whereGreaterThanOrEqualTo("ville", s)
  .whereLessThanOrEqualTo("ville", s + "\uf8ff")