可能在firebase中有一个包含搜索查询?

时间:2018-07-21 04:29:04

标签: android firebase firebase-realtime-database

我尝试过:

Query firebaseSearchQuery = 
myRef.orderByChild("from").startAt(searchText).endAt(searchText+"\uf8ff");

但是我想要这样的东西

Query firebaseSearchQuery = 
myRef.orderByChild("from").contains(searchText);

有可能吗?

2 个答案:

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

不建议将此解决方案用于大型数据集,因为您需要下载整个节点才能进行搜索。在这种情况下,建议使用AlgoliaElasticsearch

如果您打算使用Cloud Firestore,建议您从此 post 中查看答案。有关更多信息,我还建议您查看此 video

答案 1 :(得分:2)

您可能需要这个:

Query firebaseSearchQuery = myRef.orderByChild("from").equalTo(searchText + "\uf8ff");

编辑

我想使用firebase是不可能的,它需要特殊的服务才能完成。与高级搜索(类似于弹性搜索)有关的服务。