Firebase 将对象列表到 Angular 中的可观察数组 2
Firebase List Objects to Observable Array in Angular 2
我已将 Flashlight 与我的 Angular 2 项目集成。手电筒执行以下操作:
- 自动将指定的 Firebase 路径编入 ElasticSearch 集群的索引并监视这些路径的更改,重新索引任何更改。
- 响应写入指定 Firebase 路径的查询对象(例如,'search/request'),将 ElasticSearch 响应写入指定的 Firebase 路径(例如,'search/response')。
响应以以下结构写入 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
并用这些对象填充我的视图。我如何才能将这些对象放入可观察数组中?
我认为只提取 _source
children 是不可能的。但是,您可以使它比提取完整的搜索响应更有效率。
每个命中都包含很少的来源信息,因此只需检索命中并将每个命中映射到它的 _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))
或者,如果您有一些最低分数标准,您可以在按 child:
排序后执行查询
this.af.database
.list(`search/response/${this.requestKey}/hits/hits`, {
query: {
orderByChild: '_score',
startAt: 1.0
}
})
.map(hits => hits.map(hit => hit._source))
(我没有使用过手电筒,所以我不确定评分是如何工作的,但是 startAt
and/or endAt
的某种组合应该可以让您优化查询。 )
我已将 Flashlight 与我的 Angular 2 项目集成。手电筒执行以下操作:
- 自动将指定的 Firebase 路径编入 ElasticSearch 集群的索引并监视这些路径的更改,重新索引任何更改。
- 响应写入指定 Firebase 路径的查询对象(例如,'search/request'),将 ElasticSearch 响应写入指定的 Firebase 路径(例如,'search/response')。
响应以以下结构写入 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
并用这些对象填充我的视图。我如何才能将这些对象放入可观察数组中?
我认为只提取 _source
children 是不可能的。但是,您可以使它比提取完整的搜索响应更有效率。
每个命中都包含很少的来源信息,因此只需检索命中并将每个命中映射到它的 _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))
或者,如果您有一些最低分数标准,您可以在按 child:
排序后执行查询this.af.database
.list(`search/response/${this.requestKey}/hits/hits`, {
query: {
orderByChild: '_score',
startAt: 1.0
}
})
.map(hits => hits.map(hit => hit._source))
(我没有使用过手电筒,所以我不确定评分是如何工作的,但是 startAt
and/or endAt
的某种组合应该可以让您优化查询。 )