Mongodb 在Meteor中发布弹性搜索结果的正确方法
我在弹性搜索中索引了一个mongodb集合,并希望返回按给定查询的弹性搜索分数排序的mongodb文档 我不明白为什么下面的出版物会正确地迭代文档并更新每个文档的(示例)分数:Mongodb 在Meteor中发布弹性搜索结果的正确方法,mongodb,meteor,elasticsearch,Mongodb,Meteor,elasticsearch,我在弹性搜索中索引了一个mongodb集合,并希望返回按给定查询的弹性搜索分数排序的mongodb文档 我不明白为什么下面的出版物会正确地迭代文档并更新每个文档的(示例)分数: Meteor.publish "docs", (params) -> pub = @ Document.find({}, limit: 20).forEach (doc) -> doc._score = 123 # some score pub.added 'documents',
Meteor.publish "docs", (params) ->
pub = @
Document.find({}, limit: 20).forEach (doc) ->
doc._score = 123 # some score
pub.added 'documents', doc._id, doc
pub.ready()
但下面使用的弹性搜索客户端不会返回结果,事实上,迭代器甚至从未执行过:
Meteor.publish "docs", (params) ->
pub = @
client.search
size: 20
body:
query:
filtered:
query:
multi_match:
fields:['body']
query: query
.then (response) =>
results = response.body?.hits?.hits
ids = _.inject _.pluck(results, '_id'), (ids, id)->
ids.push({_id: id}); ids
, []
scores = getScores(results)
Document.find($or: ids).forEach (doc) ->
# Here is never reached.
doc._score = scores[doc._id]
pub.added 'documents', doc._id, doc
, (error) ->
console.trace error if error
pub.ready()
如果我的方法偏离了这一步,我不会感到惊讶。有没有更好的办法 我认为您只需等待调用
pub.ready()
,直到“发送了记录集的初始完整快照”。所以在搜索成功回调结束时
文件:
meteor服务器端有一个插件Elasticsearch客户端。添加了一些方法,可以轻松地管理源源不断的mongo收藏,还添加了一个meteor方法,可以从客户端进行搜索
请看这里:现在您的代码已被弃用!!万分感谢!