在firebase中搜索时如何执行或查询?

mklgxw1f  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(438)

以下是一个人的各种属性。

我想实现一个搜索,搜索结果来自以下任何字段: specializationField , hospitalNamefullName 有相同的字母。
例如,如果我搜索“sh”,此人应该出现在字段中,因为医院名称相似。
这是我用来搜索全名的代码:

FirebaseRecyclerOptions<DoctorHelperClass> options =
                new FirebaseRecyclerOptions.Builder<DoctorHelperClass>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Doctor").orderByChild("fullName").startAt(s.toUpperCase()).endAt(s.toLowerCase()+"\uf8ff"), DoctorHelperClass.class)
                        .build();

        adapter = new DoctorsAdapters(options, FindDoctorActivity.this);
        adapter.startListening();
        binding.rvListDoctors.setAdapter(adapter);

请帮帮我

fslejnso

fslejnso1#

正如@puf所说,你不能在firebase实时数据库上实现它,但你可以在客户端实现,这意味着在android部分。
首先,你不能使用 FirebaseUI 您当前正在使用的,而您需要使用https://firebase.google.com/docs/database/android/read-and-write#read_data

ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // You have to make for each loop
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
             DoctorHelperClass doc = snapshot.getValue(DoctorHelperClass.class);
             //List them in an array
             docList.add(doc);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    }
};
mPostReference.addValueEventListener(postListener);

一旦你添加了所有的医生名单。可以使用arraylist对它们进行比较。
你可以这样做。

private void searchDoc(final String inputDoc){
  boolean isFound = false;
  for (DoctorHelperClass doc in docList){
      if (doc.getFullName() == inputDoc && doc.getHospitalName() == inputDoc){
           isFound = true;
           //Do something if found
      }
  }
}

我希望你了解它的概念。

dsf9zpds

dsf9zpds2#

firebase实时数据库中不支持或不支持条件。您必须执行多个查询并在客户端合并结果,或者创建一个专用字段来执行此搜索。
但考虑到您的问题,您可能正在寻找远远超出firebase实时数据库处理范围的文本搜索功能。我建议使用一个额外的(甚至其他)数据库来满足您的文本搜索需求,而不是试图将这些需求强加给firebase。
另见:
使用firebase实时数据库创建搜索功能
如何在firebase数据库中搜索字符串中的任意位置-android
在没有服务器端代码的firebase中搜索
firebase和索引/搜索

相关问题