6

非常に基本的な質問です
。Titan を 0.54 からTitan 1.0 Hadoop 1 / TP3 バージョン 3.01にアップグレードしました。

の値を削除する際に問題が発生しました

Property key: Cardinality.LIST/SET

おそらく、アップグレード プロセスまたは私の TP3 の誤解によるものです。

 // ----- 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")));

//------------------- 出力 --------------:

削除後も、値は明らかです。

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]

何か案は?

4

2 に答える 2

10

高レベルの Gremlin API でグラフ トラバーサルを実行していませんが、現在、低レベルのグラフ API でグラフを変更しています。多くの場合、 Gremlinforでループを実行することはアンチパターンです。

TinkerPop 3.0.1 Drop Step のドキュメントによると、Gremlin コンソールから次の操作を実行できるはずです。

v = g.addV().next()
g.V(v).property("myList", "role1")
g.V(v).property("myList", "role2")
// ...
g.V(v).properties('myList').drop()
于 2016-04-11T14:08:32.197 に答える
1

property(key, value)頂点のプロパティの値を設定します ( javadoc )。VertexProperties ( javadoc ) を取得する必要があります。

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

@jbmusso は、GraphTraversal代わりに を使用して堅実なソリューションを提供しました。

于 2016-04-11T14:55:51.480 に答える