在 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 结果 json 中限制 _rev_info
使用 Cloudant 从 JSON 数组中检索 JSON 对象
无法在 Bluemix 上的 MobileFirst 容器上配置 Cloudant 数据代理