【问题标题】:Using MapReduce for results of geospatial indexes in Cloudant在 Cloudant 中使用 MapReduce 获取地理空间索引的结果
【发布时间】:2017-06-12 07:29:06
【问题描述】:

我在 Cloudant 中使用地理空间索引来检索多边形内的所有文档。现在我想为这些文档计算一些基本的静态值(例如,一个地区的平均年龄和收入总和)。

是否可以查询地理索引,然后将结果传递给 MapReduce 函数?

我怎样才能做到这一点,最好是在数据库中?我是否可以避免先查询多边形内的文档 ID,然后发送检索到的 ID 以执行 MapReduce(我正在处理大型数据集)?

目前的工作是查询索引以及使用视图(单独)。

我的地理索引

function (doc) {
  if (doc.geometry && doc.geometry.coordinates) {
    st_index(doc.geometry);
  }
}

我的看法

function (doc) {
  var beitrag = doc.properties.beitrag;
  var schadenaufwand = doc.schadenaufwand;
  if(beitrag !== null && typeof beitrag === 'number' ) {
      emit(doc._id, doc.properties.beitrag);
  }
}

geoJson 文档示例(原始数据看起来很相似)

{
  "_id": "01bff77f642fc4249e787d2ded011504",
  "_rev": "1-25a9a1a15939d5b21af3fbcc5c2d6ed1",
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      7.2316,
      40.99
    ]
  },
  "properties": {
    "age": 34,
    "earnings": 982.7
  }
}

【问题讨论】:

    标签: node.js geospatial geojson cloudant


    【解决方案1】:

    这似乎是一个有用的功能,但答案是否定的。地理索引器无法对数据执行聚合。

    我认为你必须按照你的想法去做——使用返回的 doc id 列表在另一个 map-reduce 系统中分配计算。

    【讨论】:

    • 感谢您的帮助!
    • 但是当我使用键指定要包含哪些文档时,可以使用 MapReduce 函数(例如 _stats)吗?这对我也不起作用。我需要类似 `keys: ['01bff77f678fa5149e787d2ded000504', '01bff77f678fc5049e787d2aaa00161c'], group: false, group_level: 0, reduce: true 但他在 _Multi-key fetchs for reduce 视图中的结果必须使用 group=true
    • 是的,没错——也行不通。 reduce 引擎需要能够以某种方式对数据进行分组。另外,请记住 CouchDB/Cloudant 构建会减少结果,而您正在查询这些结果。您不是要求数据库对您提供的一组文档执行临时缩减。在返回给您之前,reduce 结果始终是预先计算好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2011-12-03
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多