【发布时间】:2022-01-22 11:01:44
【问题描述】:
我有一个 12 行 csv 格式的玩具数据集,如下:
我正在尝试将这些数据加载到 arangodb 中,对其进行空间索引,然后使用 arangodb 空间查询获取数据。我在数据库中加载数据并对其进行索引的步骤如下:
arangoimport --file "cricketers.csv" --type csv --create-collection --create-collection-type document --translate "id=_key" --collection "players"
db.players.ensureIndex({type: 'geo', fields: ['lng', 'lat'], geoJson: false})
在此之后,我尝试通过向数据库发送空间查询来获取一些数据,如下所示:
db._query({'query': 'FOR node IN players FILTER GEO_CONTAINS(GEO_POLYGON([[[-70,-40],[-70,60],[180,60],[180,-40],[-70,-40]]]), [node.lng, node.lat]) RETURN node', "options" : {fullCount:true}}).getExtra();
上述示例查询理想情况下应该获取所有数据点,因为它指定了一个跨越所有数据点的 geo_polygon。但是,查询不返回任何数据点。这是查询返回的内容(查看完整计数):
{ "warnings" : [ ], "stats" : { "writesExecuted" : 0, "writesIgnored" : , scannedFull" : 12, "scannedIndex" : 0, "filtered" : 12, "httpRequests" : 0, "fullCount" : 0, "executionTime" : 0.0015139159995669615, "peakMemoryUsage" : }
如果我在不使用空间查询的情况下执行相同的查询,即使用这样的简单过滤器:
db._query({'query': 'for node in players filter -40 <= node.lat <= 60 and -70 <= node.lng <= 180 return node', 'options': {fullCount: true}}).getExtra();
这是我得到的,符合预期:
{ "warnings" : [ ], "stats" : { "writesExecuted" : 0, "writesIgnored" : 0, scannedFull" : 12, "scannedIndex" : 0, "filtered" : 0, "httpRequests" : 0, fullCount" : 12, "executionTime" : 0.0005607399998552864, "peakMemoryUsage" : 0 }
请帮助我了解我做错了什么?为什么空间查询不起作用?我尝试过将 'lat' 和 'lng' 发送到空间数据获取和索引查询的顺序,但没有效果。
ArangoDB 文档只讨论了 JSON 格式的示例,即使这样也不是很有帮助。它谈到了一些关于 analyzers 的内容,我认为这是我需要使用的东西,但不清楚如何为 csv 数据这样做。
谢谢!
【问题讨论】:
标签: geospatial arangodb