0

是否可以在 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 + 弹性搜索

4

1 回答 1

0

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

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

然后像这样查询:

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

干杯,丹尼尔

于 2014-09-01T08:25:42.933 回答