我已将Flashlight与我的Angular 2项目集成在一起。手电筒执行以下操作:
响应将写入Firebase,具有以下结构:
使用Angularfire 2,这就是我的搜索结果:
searchThreads(term: string) {
let queryBody: Object = {
index: 'firebase',
type: 'thread',
q: term
}
this.requestKey = this.af.database.list('/search/request').push(queryBody).key
}
如果我希望搜索的原始结果显示在上图中显示的所有路径,我会做这样的事情:
this.af.database.list(`search/response/${this.requestKey}`)
我想要的是在_source
找到的对象。我想迭代响应hits
并用这些对象填充我的视图。如何将这些对象放入可观察的数组?
答案 0 :(得分:1)
我不相信只能提取_source
个孩子。但是,您可以使其比提取完整的搜索响应更有效。
每次点击都包含除源之外的其他信息,因此只需检索点击并将每次点击映射到其_source
。
this.af.database
.list(`search/response/${this.requestKey}/hits/hits`)
.map(hits => hits.map(hit => hit._source))
此外,您可以使用限制查询来提取hits
的子集:
this.af.database
.list(`search/response/${this.requestKey}/hits/hits`, {
query: {
limitToFirst: 10
}
})
.map(hits => hits.map(hit => hit._source))
或者,如果您有一些最低分数的标准,您可以在孩子订购后执行查询:
this.af.database
.list(`search/response/${this.requestKey}/hits/hits`, {
query: {
orderByChild: '_score',
startAt: 1.0
}
})
.map(hits => hits.map(hit => hit._source))
(我没有使用过手电筒,所以我不确定评分是如何运作的,但startAt
和/或endAt
的某些组合可以让您优化查询。 )