【问题标题】:How can I perform OR query while searching in firebase?在 Firebase 中搜索时如何执行 OR 查询?
【发布时间】:2021-09-15 17:10:57
【问题描述】:

这是一个人的各种属性。

如果任何字段specializationFieldhospitalNamefullName 具有相同的字母,我想执行搜索。

例如,如果我搜索“sh”,此人应该出现在字段中,因为医院名称相似。

这是我用来搜索 fullName 的代码:

 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);

请帮帮我

【问题讨论】:

    标签: java android firebase firebase-realtime-database nosql


    【解决方案1】:

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

    我希望你明白它的概念。

    【讨论】:

      【解决方案2】:

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

      但鉴于您的问题,您可能正在寻找 Firebase 实时数据库无法处理的文本搜索功能。我建议不要尝试将这些要求强加到 Firebase 上,而是使用额外(甚至其他)数据库来满足您的文本搜索要求。

      另见:

      【讨论】:

        猜你喜欢
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 2015-06-26
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多