泰坦:如何高效地获得Long物业的最大价值?

时间:2016-04-02 16:15:52

标签: titan

因此,如果我想要检索具有Long属性最大值的顶点,我应该运行:

graph.traversal().V().has("type","myType").values("myProperty").max().next()

这非常慢,因为它必须加载所有顶点以找出最大值。有没有更快的方法?

任何索引都有帮助吗?我相信复合索引不会有帮助,但有没有办法使用混合索引与ElasticSearch后端?

1 个答案:

答案 0 :(得分:3)

使用Titan在数值上创建混合索引将导致Elasticsearch正确索引属性。与您类似,我们希望知道属性DEGREE从最大到最小排序的所有顶点,因此我们目前对属性DEGREE执行以下操作:

TitanGraph titanGraph = TitanFactory.open("titan-cassandra-es.properties");
TitanManagement management = graph.openManagement();

PropertyKey degreeKey = management.makePropertyKey("DEGREE").dataType(Long.class).make();

management.buildIndex("byDegree", Vertex.class)
.addKey(degreeKey)
.buildMixedIndex("search");

我们目前在让Titan快速遍历这个问题时遇到了问题(由于某种原因,它可以创建索引但很难将其用于某些查询)但我们可以直接查询Elasticsearch:

curl -XGET 'localhost:9200/titan/byDegree/_search?size=80' -d '
{
    "sort" : [
        { "DEGREE" : {"order" : "desc"}}
    ],
   "query" : {

   }
}

答案快速返回所以现在我们使用Titan创建索引,但直接查询弹性搜索。

简答: Elasticsearch可以非常轻松地完成数值范围所需的操作,我们这边的问题至少似乎让Titan完全使用这些指数。然而,你试图执行的遍历比我们更简单(你只想要最大值),所以你可能不会遇到这些问题,你可能只能完全坚持Titan遍历。

修改

我最近证实,弹性研究和泰坦可以满足您的需求(就像我的一样)。只是要小心你如何创建索引。只要您创建混合索引并将Type密钥设置为String匹配而不是Text匹配,Titan就能够快速执行您的查询。