【问题标题】:It is possible to have a contains search query in firebase? [duplicate]可以在firebase中有一个包含搜索查询吗? [复制]
【发布时间】:2018-12-29 08:56:45
【问题描述】:

我试过了:

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

但我想要这样的东西

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

有可能吗?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    对于小型数据集,您可以使用以下代码:

    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

    【讨论】:

    • 你试过我上面的解决方案,行得通吗?
    • 您能否详细说明“小数据集”是什么意思?单个节点中有多少个子节点可以视为小数据集?
    • @QadirHussain 和我一样多,你的成本不菲,否则你应该实施其中一项第三方服务。
    【解决方案2】:

    你可能需要这个:

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

    编辑

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

    【讨论】:

    • 对不起,它不起作用
    • @AngeloLucena 检查编辑。
    • 好的,谢谢,也许我会尝试弹性搜索
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多