Titan警告:查询需要迭代所有顶点

时间:2014-02-12 10:51:02

标签: titan

下面我要添加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定义为索引(见第一行)。

1 个答案:

答案 0 :(得分:4)

cdate的类型定义中,您使用 Titan的标准索引(未指定任何其他索引)。 Titan的标准索引仅支持相等比较(即没有范围查询)。

要获得对范围查询的支持,您需要使用必须在Titan中注册的索引后端,然后在类型定义中显式引用它。

查看此页面上的文档Chapter 8. Indexing for better Performance

  

Titan支持两种不同的索引来加速查询处理:图形索引以顶点为中心的索引。大多数图形查询从由其属性标识的顶点或边的列表开始遍历。图形索引使这些全局检索操作在大图上有效。以顶点为中心的索引可加快图形中的实际遍历,特别是在遍历具有许多入射边的顶点时。

底线:Titan支持多种类型的索引,它会自动选择最合适的索引来回答特定查询。在您的情况下,没有一个支持范围查询,因此警告和性能降低。上面的文档概述了如何注册提供所需支持的其他索引。

相关问题