elasticsearch,Mongodb,Meteor,elasticsearch" /> elasticsearch,Mongodb,Meteor,elasticsearch" />

Mongodb 在Meteor中发布弹性搜索结果的正确方法

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',

我在弹性搜索中索引了一个mongodb集合,并希望返回按给定查询的弹性搜索分数排序的mongodb文档

我不明白为什么下面的出版物会正确地迭代文档并更新每个文档的(示例)分数:

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方法,可以从客户端进行搜索


请看这里:

现在您的代码已被弃用!!万分感谢!