2014-02-12 89 views
2

下面我加入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作爲索引(參見第一行)。

回答

4

在您的cdate的類型定義中,您正在使用Titan的標準索引(未指定任何其他索引)。 Titan的標準索引僅支持相等比較(即無範圍查詢)。

要獲得對範圍查詢的支持,您需要使用必須向Titan註冊的索引後端,然後在類型定義中明確引用它。

退房文檔Chapter 8. Indexing for better Performance此頁上:

泰坦支持兩種不同類型的索引,以加快查詢處理的:圖指標頂點爲中心的指標。大多數圖形查詢從由其屬性標識的頂點或邊線列表開始遍歷。圖表索引使這些全局檢索操作在大圖上有效。以頂點爲中心的索引加速了圖形的實際遍歷,特別是在遍歷具有許多入射邊的頂點時。

底線:泰坦支持多種類型的索引,它會自動選擇最合適的索引來回答特定的查詢。在你的情況下,沒有任何支持範圍查詢,因此警告和性能下降。以上文檔概述瞭如何註冊提供所需支持的其他索引。

+0

我想你是在說一些事情要做,如https://groups.google.com/forum/#!topic/aureliusgraphs/n0AyWioVnoY。定義屬性鍵 – manish