我正在尝试通过我的应用程序中的搜索视图通过邮件获取特定用户。我的数据库中有 7000 多个用户,使用此搜索视图需要 5 到 10 或 15 秒来过滤和获取数据@Overridepublic boolean onQueryTextSubmit(String s) { searchQuery.startAt(s).endAt(s+"\uf8ff").limitToFirst(3).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot snapshot : dataSnapshot.getChildren()){ UserPojo user = snapshot.getValue(UserPojo.class); Log.i(TAG, "onDataChange: " + user.getEmail()); } } @Override public void onCancelled(DatabaseError databaseError) { } }); return false;}问题是过滤数据所需的时间(从 5 到 15 秒)有没有用更好的查询更快地过滤?还是我需要首先获取所有数据,在本地存储,然后在客户端对其进行过滤?关于如何解决这个问题的任何建议?我还注意到分析器每次搜索都需要 4 到 8mb 的网络才能完成,这只是一个简单的文本查询的大量网络使用。
1 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
听起来您可能没有在要搜索的字段上定义索引。如果没有索引,则无法在服务器上进行过滤。所以在这种情况下,服务器将所有数据发送给客户端,客户端进行过滤。这将解释为什么它花费的时间比您预期的要长:它必须将所有 7000 个用户配置文件发送到客户端。
如果这确实是问题的原因,您可以通过在规则文件中添加索引来修复它。假设您正在对名为users的属性上调用的列表进行排序/过滤email,您可以通过以下方式执行此操作:
{
"rules": {
"users": {
".indexOn": "email"
}
}
}
添加回答
举报
0/150
提交
取消