如何在Firebase数据库中的字符串中任何地方搜索-Android

Dar*_*wda 7 android firebase firebase-realtime-database

我已经在我的Android应用中实现了Firebase实时数据库,一切都很好。我正在尝试添加一个搜索功能,并且我只能通过起始单词匹配来搜索数据库。下面是我的数据库快照:

在此处输入图片说明

我正在查询movieName。现在,我可以搜索查询字符串是否为Pets / Pe / pet。但是,当我搜索动物时,结果为零。因此,基本上我正在寻找的是在字符串中任何位置使用查询文本搜索数据库。即,我应该能够搜索动物/和/宠物,并且应该获得包含搜索查询的结果。

下面是到目前为止的代码。

mDatabaseReference.child("recent").getRef().orderByChild("movieName").startAt(query)
                    .endAt(query + "\uf8ff")
Run Code Online (Sandbox Code Playgroud)

Ale*_*amo 3

要在字符串中搜索字符串,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference animalsRef = rootRef.child("Animals");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Boolean found;
        String search = "Animals";
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String movieName = ds.child("movieName").getValue(String.class);
            found = movieName.contains(search);
            Log.d("TAG", movieName + " / " + found);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
animalsRef.addListenerForSingleValueEvent(eventListener);
Run Code Online (Sandbox Code Playgroud)

如您所见,我们在数据库中查询所有电影名称,然后在movieName.

  • 您应该补充一点,这是客户端过滤,并且您本质上不使用数据库进行搜索;相反,您将迭代整个数据库并过滤客户端。这可能是某些情况下适用的解决方案,但不适用于其他情况(我的情况涉及数十亿字节,并且应用客户端过滤不切实际)。 (3认同)