在 Cloudant 中使用 MapReduce 获取地理空间索引的结果

Posted

技术标签:

【中文标题】在 Cloudant 中使用 MapReduce 获取地理空间索引的结果【英文标题】:Using MapReduce for results of geospatial indexes in Cloudant 【发布时间】: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
  

这个问题很相似,但并没有真正帮助我:Cloudant - apply a view/mapReduce to a geospatial query

这个演示可能是正确的方向:https://examples.cloudant.com/simplegeo_places/_design/geo/index.html

【问题讨论】:

【参考方案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 结果始终是预先计算好的。

以上是关于在 Cloudant 中使用 MapReduce 获取地理空间索引的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cloudant创建视图

如何在 cloudant 结果 json 中限制 _rev_info

使用 Cloudant 从 JSON 数组中检索 JSON 对象

无法在 Bluemix 上的 MobileFirst 容器上配置 Cloudant 数据代理

使用 Cloudant 在 IBM Container 上的 MFPF 不起作用

Cloudant 身份验证:缺少 _users 数据库