Home » Android » android – It is possible to have a contains search query in firebase?

android – It is possible to have a contains search query in firebase?

Posted by: admin June 15, 2020 Leave a comment

Questions:

I tried this:

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

but i want something like this

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

it is possible ?

How to&Answers:

For small datasets you can use the following code:

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

This solution is not recommended for large datasets because you’ll need to download the entire node in order to make a search. In this case, Algolia or Elasticsearch are recommended.

If you intend to use Cloud Firestore, I recommend you to see my answer from this post. For more information, I also recommend you see this video.

Answer:

You need maybe this:

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

EDIT

I guess it is not possible using firebase, it needs a special service in order to be done. A service that has to do with advanced searching (something like elastic search).