2016-04-11 7 views
4

削除/
を非常に基本的な質問を頂点タイタン上に複数のプロパティキーを削除することはできません私はちょうど0.54からに私のタイタンタイタン1.0 Hadoopの1/TP3バージョン3.01をアップグレードしました。は、1.0 Tinkerpop 3

私は多分プロセスまたはちょうど私のTP3の誤解をアップグレードする予定です

Property key: Cardinality.LIST/SET 

の値を削除すると問題が発生しました。

// ----- CODE ------: 

tg = TitanFactory.open(c); 

TitanManagement mg = tg.openManagement(); 

//create KEY (Cardinality.LIST) and commit changes 
tm.makePropertyKey("myList").dataType(String.class).cardinality(Cardinality.LIST).make(); 
mg.commit(); 

//add vertex with multi properties 

Vertex v = tg.addVertex(); 

v.property("myList", "role1"); 
v.property("myList", "role2"); 
v.property("myList", "role3"); 
v.property("myList", "role4"); 
v.property("myList", "role4"); 

今、私はすべての値 "ROLE1、role2の...."

// iterate over all values and try to remove the values 
List<String> values = IteratorUtils.toList(v.values("myList")); 
     for (String val : values) { 
      v.property("myList", val).remove(); 
     } 
    tg.tx().commit(); 

//を削除したいです-------------- - 期待される結果----------: 空の頂点プロパティ

しかし残念ながら結果は空ではありません。

System.out.println("Values After Delete" + IteratorUtils.toList(v.values("myList"))); 

// ------------------- OUTPUT --------------:

削除後の値は次のとおりです。まだ明らかです!

15:19:59,780 INFO ThriftKeyspaceImpl:745 - Detected partitioner org.apache.cassandra.dht.Murmur3Partitioner for keyspace titan 

15:19:59,784 INFO Values After Delete [role1, role2, role3, role4, role4] 

+1

Neo4j – jbmusso

答えて

1

property(key, value)頂点(javadoc)にプロパティの値を設定します。あなたがしなければならないのは、、VertexProperties(javadoc)です。

for (VertexProperty vp : v.properties("name")) { 
    vp.remove(); 
} 

@jbmussoは代わりにGraphTraversalを使用して固溶体を提供した。

+0

おかげさまで、両方のソリューションが動作しますが、私のTitanアップグレードにはTP2に似たレガシーコードがたくさんあるので、 "tg.query()。has(NODE_TYPE、NodeType.USER.name())。vertices(..)のような基本クエリの代わりに、すべてのコードを" traversal "に置き換える方が良いかどうかわかりません。 ..、etc '"私は少しパフォーマンスを良くすることを混同していますか? と "traversal"機能を使用する必要があるとき...ありがとうございました – VitalyT

+1

パフォーマンスに対するクエリの保守性と表現力を優先し、可能な限りトラバーサルを使用します。トラバーサルには最適化戦略が組み込まれており、無料で利用できるため、トラバースオーバーヘッドがあればそれを心配する必要はありません。 – jbmusso

+2

私は@jbmussoに同意します。また、別のグラフバックエンドを選択する場合には、より柔軟性があるので、TinkerPop 3トラバーサルAPI(Titanの 'query()'ではなく)に移行することをお勧めします。 –

7

上位レベルのGremlin APIではグラフトラバーサルを実行していませんが、現在は下位レベルのグラフAPIでグラフを変更しています。 Gremlinのforループは、しばしば反パターンです。

TinkerPop 3.0.1 Drop Step documentationによると、あなたはグレムリンコンソールから次の操作を行うことができる必要があります:

v = g.addV().next() 
g.V(v).property("myList", "role1") 
g.V(v).property("myList", "role2") 
// ... 
g.V(v).properties('myList').drop()