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

Posted

技术标签:

【中文标题】在 Firebase 中搜索时如何执行 OR 查询?【英文标题】:How can I perform OR query while searching in firebase? 【发布时间】: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);

请帮帮我

【问题讨论】:

【参考方案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 上,而是使用额外(甚至其他)数据库来满足您的文本搜索要求。

另见:

Use firebase realtime database create search function How to search anywhere in string in Firebase Database - Android Searching in Firebase without server side code Firebase and indexing/search

【讨论】:

以上是关于在 Firebase 中搜索时如何执行 OR 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter Firebase 应用中搜索并向附近的人发送通知?

如何在android的firebase中执行快速搜索[关闭]

firebase swift -- 用户查询

Firebase 实时数据库在查询之间按单词搜索?

如何在 Firebase 中执行连接查询? [复制]

无法在 Isolate 中执行 Firebase 查询