我尝试过:
Query firebaseSearchQuery =
myRef.orderByChild("from").startAt(searchText).endAt(searchText+"\uf8ff");
但是我想要这样的东西
Query firebaseSearchQuery =
myRef.orderByChild("from").contains(searchText);
有可能吗?
答案 0 :(得分:3)
对于小型数据集,您可以使用以下代码:
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String from = ds.child("from").getValue(String.class);
list.add(from);
}
for(String str : list) {
if(str.contains(searchText)) {
Log.d("TAG", "String found!");
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
myRef.addListenerForSingleValueEvent(valueEventListener);
不建议将此解决方案用于大型数据集,因为您需要下载整个节点才能进行搜索。在这种情况下,建议使用Algolia或Elasticsearch。
如果您打算使用Cloud Firestore,建议您从此 post 中查看答案。有关更多信息,我还建议您查看此 video 。
答案 1 :(得分:2)
您可能需要这个:
Query firebaseSearchQuery = myRef.orderByChild("from").equalTo(searchText + "\uf8ff");
编辑
我想使用firebase是不可能的,它需要特殊的服务才能完成。与高级搜索(类似于弹性搜索)有关的服务。