泰坦的地理空间顶点中心指数可能吗?

时间:2014-08-28 05:21:59

标签: elasticsearch geospatial titan database-indexes rexster

是否可以在Titan中创建地理空间顶点中心索引?

我已尝试按照指南https://github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices中的模式在rexster控制台中创建一个模式,但失败了。

geo_location=g.makeKey("geo_location").dataType(Geoshape.class).make();
g.makeLabel("edge_label").sortKey(geo).signature(geo).make();

==>An error occurred while processing the script for language [groovy].
All transactions across all graphs in the session have been concluded with failure:    
java.util.concurrent.ExecutionException:
javax.script.ScriptException: 
javax.script.ScriptException:
java.lang.IllegalArgumentException:
Key must have comparable data type to be used as sort key: geo_location

我尝试过创建一个常规地理空间索引,但是当查询具有大量边缘并且有问题的地理空间属性的顶点时,这会降低性能。

我设想能够执行以下操作并检索圆内的所有边,最好按距(x,y)的距离排序。

x = 0
y = 0
radius = 10
circle = Geoshape.circle(current_position_x, current_position_y, nearby_radius)
some_vertex_with_centric_index.outE('edge_label').has(location, WITHIN, circle)

使用Titan Server 0.4.4 w / Cassandra 2.0.3 +弹性搜索

1 个答案:

答案 0 :(得分:0)

我不认为这是/可能的。按键排序边缘按升序或降序排序。您如何按任何顺序对位置进行排序?在你的情况下,我会做的是:

  • 预先计算从顶点A到顶点B的距离
  • 将预先计算的距离存储为边缘属性
  • 使用预先计算的距离作为排序键

然后像这样查询:

location.outE('edge_label').has('distance', T.lte, radius).inV()

干杯, 丹尼尔