首页 > 解决方案 > 如何通过输入任何给定属性的字符串从firebase搜索数据。?

问题描述

我想从 firebase 搜索数据。每当用户在搜索视图中输入任何内容时,它都会搜索相关数据。例如,如果用户输入公司名称,它应该显示与该公司相关的数据,或者如果用户输入价格,它应该显示与该特定价格相关的数据。我的 Recyclerview 工作正常。我正在获取数据,但它只根据公司名称搜索数据。

这是我的代码

private void getData(String query) {

    Query firebaseSearchQuery = myRef.orderByChild("companyName").startAt(query).endAt("\uf8ff");

    FirebaseRecyclerOptions<Package> options = new FirebaseRecyclerOptions
            .Builder<Package>().setQuery(firebaseSearchQuery, Package.class).build();

    final FirebaseRecyclerAdapter<Package, PackagesViewHolder> firebaseRecyclerAdapter =
            new FirebaseRecyclerAdapter<Package, PackagesViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull PackagesViewHolder packagesViewHolder, int i, @NonNull Package aPackage){
                    packagesViewHolder.setDetails(getApplicationContext(), packagesViewHolder, i, aPackage.getPackageName()/*, aPackage.getPackageType()*/, aPackage.getCompanyName(), aPackage.getData()
                            , aPackage.getOnNetMinutes(), aPackage.getOffNetMinutes(), aPackage.getSms()
                            , aPackage.getPrice(), aPackage.getValidity()
                            , aPackage.getSubscriptionCode(), aPackage.getUnsubCode()
                            , aPackage.getRemainingDataCode(), aPackage.getInfo()
                            /*, aPackage.getTermsAndConditions()*/);

                }

                @NonNull
                @Override
                public PackagesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_layout, parent, false);
                    PackagesViewHolder packagesViewHolder = new PackagesViewHolder(view, SearchActivity.this);
                    return packagesViewHolder;
                }
            };
    recyclerView.setAdapter(firebaseRecyclerAdapter);
    firebaseRecyclerAdapter.startListening();
}

**这是我的firebase数据库的结构**

标签: androidfirebasefirebase-realtime-database

解决方案


Firebase 上没有内置运算符来搜索节点的所有属性。如果您的应用需要此类功能,您可能需要考虑为此使用不同/额外的数据库,例如使用 Algolia 进行搜索,使用 Firebase 进行实时同步。

或者,您可以在 Firebase 中构建自己的搜索结构,正如我在此处的回答中所示:如何在 Firebase 中基于多个条件进行查询?

另见:


推荐阅读