下面我要添加cdate
索引,然后添加一些数据:
baseGraph.makeKey("cdate").dataType(Long.class).indexed(Vertex.class).make();
for(int i=0;i<20;i++){
Vertex page = g.addVertex("P0"+i);
page.setProperty("cdate", new Date().getTime());
page.setProperty("pName","pName-P0"+i);
Edge e =g.addEdge(null, user, page, "created");
e.setProperty("time", i);
Thread.sleep(2000);
}
for(int i=20;i<25;i++){
Vertex page = g.addVertex("P0"+i);
page.setProperty("cdate", new Date().getTime());
page.setProperty("pName","pName-P0"+i);
Edge e =g.addEdge(null, user, page, "notcreated");
e.setProperty("time", i);
Thread.sleep(2000);
}
g.commit();
现在我运行以下查询:
Iterable<Vertex> vertices = g.query().interval("cdate",0,time).
orderBy("cdate", Order.DESC).limit(5).vertices();
它以正确的顺序给出输出,但它显示:
WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx -
Query requires iterating over all vertices [(cdate >= 0 AND cdate < 1392198350796)].
For better performance, use indexes
但我已将cdate
定义为索引(见第一行)。
答案 0 :(得分:4)
在cdate
的类型定义中,您使用 Titan的标准索引(未指定任何其他索引)。 Titan的标准索引仅支持相等比较(即没有范围查询)。
要获得对范围查询的支持,您需要使用必须在Titan中注册的索引后端,然后在类型定义中显式引用它。
查看此页面上的文档Chapter 8. Indexing for better Performance:
Titan支持两种不同的索引来加速查询处理:图形索引和以顶点为中心的索引。大多数图形查询从由其属性标识的顶点或边的列表开始遍历。图形索引使这些全局检索操作在大图上有效。以顶点为中心的索引可加快图形中的实际遍历,特别是在遍历具有许多入射边的顶点时。
底线:Titan支持多种类型的索引,它会自动选择最合适的索引来回答特定查询。在您的情况下,没有一个支持范围查询,因此警告和性能降低。上面的文档概述了如何注册提供所需支持的其他索引。