Java Firebase。indexOn未按预期工作

Java Firebase。indexOn未按预期工作,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个content节点,可以从Firebase实时数据库中检索。 我利用.orderByChild(“time”)获取按最早时间戳排序的前5个博客对象的数据快照。我 我目前正在尝试使用.indexOn:“time”,这样我就不必使用.orderByChild(“time”),因为我希望在检索博客对象时,后端已经按照其时间戳对其进行排序。(我将处理大量博客对象,因此我希望在后端使用.indexOn:“time”,而不是在前端使用orderByChild(“time”),以提高效率)。当前,.i

我有一个
content
节点,可以从Firebase实时数据库中检索。 我利用
.orderByChild(“time”)
获取按最早时间戳排序的前5个博客对象的数据快照。我

我目前正在尝试使用
.indexOn:“time”
,这样我就不必使用
.orderByChild(“time”)
,因为我希望在检索博客对象时,后端已经按照其时间戳对其进行排序。(我将处理大量博客对象,因此我希望在后端使用
.indexOn:“time”
,而不是在前端使用
orderByChild(“time”)
,以提高效率)。当前,
.indexOn
不起作用,并且在检索数据时,数据不按其时间字段排序

查询时不使用
.indexOn

//这很好用
//startAt用于保存检索到的最后一个blog对象以检索更多数据
查询=
FirebaseDatabase.getInstance().getReference()
.child(“内容”)
.orderByChild(“时间”)
.startAt(nodeId)
.limitToFirst(5);
使用.indexOn进行查询

//这与下面的Firebase规则一起不会返回与上面相同的结果
//startAt用于保存检索到的最后一个blog对象以检索更多数据
查询=
FirebaseDatabase.getInstance().getReference()
.child(“内容”)
.startAt(nodeId)
.limitToFirst(5);
Firebase规则:

{
 "rules": {
 ".read": true,
 ".write": true,
 "content" : {
      ".indexOn": "time"
  }
 }
}
Firebase中数据的JSON结构:

"content" : {
"blog-0001" : {
  "content_id" : "blog-0001",
  "image" : "someimage",
  "time" : 13,
  "title" : "title1",
  "type" : "blog"
},
"blog-0002" : {
  "content_id" : "blog-0002",
  "image" : "someimage",
  "time" : 12,
  "title" : "title2",
  "type" : "blog"
},
"blog-0003" : {
  "content_id" : "blog-0003",
  "image" : "someimage",
  "time" : 11,
  "title" : "title3",
  "type" : "blog"
},
"blog-0004" : {
  "content_id" : "blog-0004",
  "image" : "someimage",
  "time" : 15,
  "title" : "title4",
  "type" : "blog"
}
...
}

您似乎误解了
.indexOn
的功能,以及它与
orderByChild(“时间”)
的关系

要从
内容中检索子节点,请始终调用
orderByChild(“time”)

如果定义索引(使用
“.indexOn”:“time”
),则排序和筛选将在服务器上完成

如果没有索引,
content
下的所有数据都将下载到客户端,并在客户端执行排序/过滤

因此,
.indexOn
不能替代
orderByChild
。相反,这两种方法协同工作来执行数据的有效排序和过滤