在 firebase 中搜索时如何执行 OR 查询?
How can I perform OR query while searching in firebase?
这是一个人的各种属性。
我想执行一个搜索,如果任何字段 specializationField
、hospitalName
或 fullName
具有相同的字母,就会出现结果。
例如,如果我搜索'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
}
}
}
我希望你明白它的概念。
这是一个人的各种属性。
我想执行一个搜索,如果任何字段 specializationField
、hospitalName
或 fullName
具有相同的字母,就会出现结果。
例如,如果我搜索'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
}
}
}
我希望你明白它的概念。