2016-06-01 56 views
0

我使用Titan 1.0和elasticsearch作爲後端。 從titan文檔中,我瞭解到使用elasticsearch時,我們在構建索引時使用mixedIndex。 這是我的使用案例和問題: 我正在創建圖書館的註冊數據的圖形數據庫,我有註冊時間的數據以及其他個人信息,如姓名和年齡。我想查詢在給定時間範圍內註冊的所有用戶,換句話說,我希望查詢的數字比較函數。這是我如何創建索引:Titan 1.0混合索引不能處理警告 - 查詢需要迭代所有頂點

PropertyKey propertyKey = mgmt.makePropertyKey("registTime").dataType(Date.class) 
    .cardinality(Cardinality.SINGLE).make() 

timeIndex = mgmt.buildIndex("registeredTime",Vertex.class) 
    .addKey("registTime", Mapping.TEXTSTRING.asParameter()) 
    .buildMixedIndex("search"); 

的timeIndex創建成功,但是,當我想註冊的時間查詢:

g.V().has("registTime", gt("2015-01-01 00:00:00.000+0000")) 

它給了我:

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

它給了我一個空的結果,雖然我用gremlin命令檢查並確認數據就在那裏。我做錯了什麼?我怎麼解決這個問題?

回答

1

此錯誤表示索引尚未ENABLED

泰坦指數有INSTALLED,REGISTERED,ENABLEDDISABLED狀態。欲瞭解更多信息,看看here

在使用之前,您需要將索引狀態設置爲ENABLED。否則,你會得到這個警告。

這是如何啓用索引。

mgmt = graph.openManagement() 
mgmt.updateIndex(mgmt.getGraphIndex("registeredTime"), SchemaAction.ENABLE).get() 
mgmt.commit() 

然後等待,直到它切換,

ManagementSystem.awaitGraphIndexStatus(graph, propertyKeyIndexName) 
        .status(SchemaStatus.ENABLED) 
        .timeout(10, ChronoUnit.MINUTES) // set timeout to 10 min 
        .call(); 

所以從現在開始,所有添加的數據將被編入索引。如果你想索引已經添加的數據:

mgmt = graph.openManagement() 
mgmt.updateIndex(mgmt.getGraphIndex("registeredTime"), SchemaAction.REINDEX).get() 
mgmt.commit() 

欲瞭解更多,請閱讀docs herehere

+0

感謝您的快速回復。我發現我的索引沒有正確創建,不知是否因爲數據類型(Date.class)。但我從泰坦文件瞭解到,混合索引也支持Date類型。如果我將其更改爲String.class,它將被正確創建。 – RWM

+0

而且,即使它被正確創建,我在mgmt.updateIndex行(mgmt.getGraphIndex(「registeredTime」),SchemaAction.ENABLE_INDEX).get();下面也會得到NullPointerException。 。 – RWM

相關問題