mongodb - 在 Meteor 中发布 Elasticsearch 结果的正确方法

标签 mongodb meteor elasticsearch

我有一个在 Elastic Search 中索引的 mongodb 集合,我想返回按给定查询的 elastic search _score 排序的 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()

但下面使用 Elasticsearch 客户端不返回结果,事实上,迭代器甚至从未执行过:

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() 直到“已发送记录集的初始、完整快照”。所以...在搜索成功回调结束时。

文档: http://docs.meteor.com/#publish_ready

关于mongodb - 在 Meteor 中发布 Elasticsearch 结果的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875228/

相关文章:

elasticsearch - 应用match_phrase和filter

java - 将 dbcursor 对象转换为 json

mongodb - 多更新在 MongoDB 中不起作用

javascript - 在通过meteor的publish方法提供数据之前添加来自另一个mongodb集合的信息

meteor - 停止 meteor 实时重新加载特定文件夹

elasticsearch - Elasticsearch 全字符串匹配不起作用

codeigniter - 在 elasticsearch 中将字段类型从 'date' 更新为 'string'

java - 在Spring Boot JPA中没有定义bean的情况下从mongodb获取所有集合数据

java - Mongo 连接泄漏与吗啡

mongodb - 如何连接到 Meteor 中的外部 MongoDB 实例?