我在 stackoverflow 上搜索了很多并阅读了很多问题 我有 3 个 indexOn 问题,其中 2 个已解决,1 个仍然存在 我正在对数据库进行排序,并在成功运行的“Collection 夹”和“诗人”上设置了 indexOn,但我还需要一个用于心脏节点内数字的 indexOn。 查询运行成功,但我在 android studio 中收到 indexOn 警告
我尝试在数据库规则中使用变量代替数字,但仍然收到警告
Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding '".indexOn": "heart/+91916*******"' at gazal to your security and Firebase Database rules for better performance
queryFav = FirebaseDatabase.getInstance()
.getReference(reference).orderByChild(child).equalTo("heart");
上面的查询运行成功但是indexOn规则应该是什么
最佳答案
您收到的消息意味着您正在运行一个查询,该查询在名为 gazal
的节点上具有 orderBy("heart/+91916*******")
.要高效地运行该查询,您需要在 heart/+91916*******
上为您的安全规则中的该节点创建一个索引。但是由于该索引的 +91916*****
部分可能是动态的(即您将有不同的值 +91916*******
应用程序的每个用户),您必须为每个用户添加一个索引。那是不可行的。
换句话说:您当前的数据结构使阅读喜欢特定诗歌的用户变得容易。然而,确定特定用户喜欢的诗歌并不容易。为了使这同样容易,您需要添加一个额外的数据结构”
"user_hearts": {
"+91916*******": {
"-KjYiXzl1ancR8Pi3MfQ": true
}
}
通过上述结构,您可以轻松地为您感兴趣的用户读取user_hearts
节点,然后在需要时一首一首地读取诗歌。
另见:
关于java - 在更深的嵌套项目上使用 indexOn 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757754/