2016-10-03 72 views
1

我試圖創建一個頂點label.Vertex創建索引如下是否有可能建立索引標籤在頂點

val v0 = graph + "A" 

我的每一個精怪查詢基於以下warining消息

頂點label.Getting

WARN cttgtransaction.StandardTitanTx - 查詢需要迭代所有頂點[(〜label = 301)]。爲了獲得更好的性能,使用索引

項目使用泰坦+卡桑德拉(存儲後端),以下是依賴關係中使用的SBT,

"com.michaelpollmeier" %% "gremlin-scala" % "3.0.2-incubating.2", 
"com.thinkaurelius.titan" % "titan-core" % "1.0.0", 
"com.thinkaurelius.titan" % "titan-cassandra" % "1.0.0", 
"com.netflix.astyanax" % "astyanax-cassandra" % "3.9.0", 
"com.netflix.astyanax" % "astyanax-core" % "3.9.0", 
"com.netflix.astyanax" % "astyanax-thrift" % "3.9.0" 

創建如下指標,

mgmt.makePropertyKey("endpoint").dataType(classOf[String]).m‌​ake(); 

mgmt.buildIndex("endpoint",classOf[Vertex]).addKey(name1).un‌​ique().buildComposit‌​eIndex() 

mgmt.commit() 

graph.tx().commit() 

收到此錯誤

com.thinkaurelius.titan.core.SchemaViolationException:爲鍵[〜T $ SchemaName]和值[rtendpoint]添加此屬性違反了唯一性約束[SystemIndex#〜T $的SchemaName]

+0

而不是連續發表評論,你應該修改自己的問題與這些額外的信息。它使你的問題更容易理解,你可能會從社區獲得更多幫助。 –

+0

刪除了評論並更新了最新的問題 – Gopi

回答

2

根據this

是你可以輕鬆訪問底層小鬼-Java對象如果需要的話,例如訪問圖形分析細節東西像索引

因此,我假設過程應該是與定義here相同。

基於這一假設,首先,您將索引應用於屬性而不是標籤。然而,在加載數據的高級中創建圖表模式是一個好主意。話雖這麼說你可能要做到以下幾點:

TitanManagement management = graph.openManagement(); 

1.定義你的頂點標籤

這是可以做到的:

VertexLabel foundLabel = management.getVertexLabel("A"); 
if(foundLabel == null) 
    management.makeVertexLabel("A").make(); 

2.定義你的屬性

這讓泰坦知道哪些屬性可以預期索引:

if (management.getPropertyKey("ID") == null) { 
    management.makePropertyKey("ID").dataType(String.class).make(); 
} 

3.定義索引屬性

索引時屬性,然後你對這些屬性遍歷會快很多:

TitanIndex index = management.getGraphIndex("byID"); 
if(index == null) { 
    PropertyKey key = management.getPropertyKey("ID"); 
    TitanManagement.IndexBuilder indexBuilder = management.buildIndex("byID", Vertex.class).addKey(key); 
    if (isUnique) //Do you want the property to be unique ? 
     indexBuilder.unique(); 
    indexBuilder.buildCompositeIndex(); 
} 
+0

Teixeria非常感謝您的回答。我對此沒有懷疑。 ** 1。定義頂點標籤**爲什麼我們需要這樣做? ** 2 **。當我們創建頂點時,我們需要用一些值來設置這個屬性(ID),並且使用ID來遍歷,而不是使用'hasLabel'對嗎? – Gopi

+0

提前定義它通常是很好的做法。這不是建議的,但有時當你有很多索引和很多屬性時,如果你試圖創建一個新的標籤,Titan會抱怨它是一個SchemaViolation。 至於你的第二個問題,是的,這是正確的。要使用索引,您應該遍歷屬性,而不是標籤。我只是使用'ID'作爲例子。 –

+1

非常感謝。我修改了我的quries,如下圖graph.V()。has(ID,A).out()。label()。toList()'。現在WARN消息不會來。 – Gopi

相關問題