在 Firebase 中搜索时如何执行 OR 查询?
Posted
技术标签:
【中文标题】在 Firebase 中搜索时如何执行 OR 查询?【英文标题】:How can I perform OR query while searching in firebase? 【发布时间】:2021-09-15 17:10:57 【问题描述】:这是一个人的各种属性。
如果任何字段specializationField
、hospitalName
或fullName
具有相同的字母,我想执行搜索。
例如,如果我搜索“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 应用中搜索并向附近的人发送通知?