I have worked for search about how to search in FireBase by value and I couldn't have a fully answer so I am asking now
I have used this method and I couldn't get the correct result:
public class Search extends Fragment {
public Search() {
    // Required empty public constructor
}
private SearchView mSearch;
private RecyclerView rvSearch;
private DatabaseReference mRef;
private SearchPlaceAdapter mAdapter;
ArrayList<Place> arrayList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_search, container, false);
    //Recylerview of place
    rvSearch = (RecyclerView) view.findViewById(R.id.rvSearch);
    rvSearch.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    //final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    //layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rvSearch.setLayoutManager(layoutManager);
    mRef = FirebaseDatabase.getInstance().getReference();
    mRef.child("Place").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            arrayList = new ArrayList<>();
            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                arrayList.add(eventSnapshot.getValue(Place.class));
            }
            mAdapter = new SearchPlaceAdapter(getContext(), arrayList);
            rvSearch.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    //searchView of place
    mSearch = (SearchView) view.findViewById(R.id.mSearch);
    mSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
        @Override
        public boolean onQueryTextChange(String newText) {
            if(mAdapter!=null){
                mAdapter.getFilter().filter(newText);
            }
            return false;
        }
    });
    return view;
}
}
Adapter Code ......................................................
public class SearchPlaceAdapter extends RecyclerView.Adapter<SearchPlaceAdapter.SearchPlaceAdapterViewHolder> implements Filterable {
    Context mCntx;
    public ArrayList<Place> arrayList;
    public ArrayList<Place> arrayListFiltered;
    public SearchPlaceAdapter(Context mCntx, ArrayList<Place> arrayList)
    {
        this.mCntx = mCntx;
        this.arrayList = arrayList;
        arrayListFiltered = arrayList;
        /*arrayListFiltered = new ArrayList<>(arrayList);*/
    }
    @Override
    public int getItemCount()
    {
        return arrayList.size();
    }
    public long getItemId(int position)
    {
        return position;
    }
    @Override
    public SearchPlaceAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_layout, parent, false);
        SearchPlaceAdapterViewHolder viewHolder = new SearchPlaceAdapterViewHolder(view);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(SearchPlaceAdapterViewHolder holder, final int position)
    {
        final Place place = arrayList.get(position);
        holder.txtPlace.setText(arrayList.get(position).getBuilding());
        Picasso.with(mCntx).load(place.getPlaceImg()).into(holder.image);//using picasso to load image
        holder.cardPlace.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(mCntx, CardviewSearch.class);
                intent.putExtra("placeId", String.valueOf(place.getPlaceId()));
                intent.putExtra("building", String.valueOf(place.getBuilding()));
                intent.putExtra("street", String.valueOf(place.getStreet()));
                intent.putExtra("imgurl", String.valueOf(place.getPlaceImg()));
                mCntx.startActivity(intent);
            }
        });
    }
    public class SearchPlaceAdapterViewHolder extends RecyclerView.ViewHolder
    {
        TextView txtPlace;
        ImageView image;
        CardView cardPlace;
        public SearchPlaceAdapterViewHolder(View itemView) {
            super(itemView);
            txtPlace = (TextView) itemView.findViewById(R.id.txtPlace);
            image = (ImageView) itemView.findViewById(R.id.image);
            cardPlace = (CardView) itemView.findViewById(R.id.cardPlace);
        }
    }
    public Filter getFilter()
    {
        return exampleFilter;
    }
    private Filter exampleFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Place> filteredList = new ArrayList<>();
            if (constraint == null || constraint.length() == 0) {
                filteredList.addAll(arrayListFull);
            } else {
                String filterPattern = constraint.toString().toLowerCase().trim();
                for (Place item : arrayListFull) {
                    if (item.getBuilding().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }
        @Override
        protected void publishResults(CharSequence charSequence, FilterResults results) {
            arrayList.clear();
            arrayList.addAll((List)results.values);
            notifyDataSetChanged();
        }
    };
}
It only search by front keyword not the whole thing filtered. How to use contains?
I wanted the values to be searched with every possible values not only by front values. Please I need help.
 
     
    