2016-04-21 22 views
1

我在下面的代码中使用泰坦警告:查询需要迭代在所有顶点[(名称<>空)]

mgmt = g.getManagementSystem() 
PropertyKey name = mgmt.makePropertyKey("name").dataType(String.class).make(); 
mgmt.buildIndex("name",Vertex.class).addKey(name).unique().buildCompositeIndex(); 

,同时从图中检索数据我收到此警告,

TransactionalGraph tx = g.newTransaction(); 
Iterator vertex=tx.query().has("name").vertices.iterator(); 

遍历整个图来获取顶点而不是索引顶点。 请建议更改。

+0

什么版本的泰坦? –

+0

我正在使用titan-0.5.2-hadoop2 – userRaj

回答

2

下面是Titan 1.0 indexing documentation的链接,但其对复合索引的描述也适用于0.5.2。

复合索引是非常快速和有效的,但受限于平等 查找财产 键的特定,先前定义的组合。

复合索引用于精确匹配键值检索。您的查询应该包含您正在查找的属性值,以便利用索引。

tx.query().has("name", "userRaj").vertices.iterator() 

你有它在你的问题编码方式,因此它必须扫描具有财产name,因为它不试图以匹配任何特定的值(即null)的所有顶点。

WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [(name <> null)]. For better performance, use indexes 

如果您正在开发新的Titan开发,我建议您升级到1.0,因为0.5.x流中不会有更多版本。

+0

我想要使用key = name来获取所有顶点。我尝试了graph.indexQuery(“name”,“v.name:*”)。vertices()。iterator();但它给非法ArgumentException – userRaj

+1

因为现在你试图做一个直接索引查询,这应该是针对混合索引(外部索引后端),而不是一个复合索引。 http://s3.thinkaurelius.com/docs/titan/1.0.0/direct-index-query.html –