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

How can I perform OR query while searching in firebase?

这是一个人的各种属性。

我想执行一个搜索,如果任何字段 specializationFieldhospitalNamefullName 具有相同的字母,就会出现结果。

例如,如果我搜索'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);

请帮帮我

Firebase 实时数据库不支持 OR 条件。您将不得不执行多个查询并在客户端合并结果,或者创建一个专门的字段来执行此搜索。

但是鉴于您的问题,您可能正在寻找远远超出 Firebase 实时数据库处理范围的文本搜索功能。与其试图将这些要求硬塞给 Firebase,我建议使用一个额外的(甚至其他)数据库来满足您的文本搜索要求。

另见:

  • Use firebase realtime database create search function
  • Firebase and indexing/search

正如@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
      }
  }
}

我希望你明白它的概念。