リストプロパティの値全体を更新し、Titan 1.0の新しい値を設定します。単一カーディナリティの場合はvertex.property("single_property",new_value)
を使用して全体を上書きしますList型のカーディナリティでは、新しい値がプロパティに追加されます(値全体を上書きしません)。さらに、プロパティを削除して新しい値を追加すると、同じトランザクションでは、操作全体がTitanによって無視されるようです!したがって、私の質問は、どのように適切な方法でリストプロパティの値全体を更新できますか?TitanグラフデータベースのListカーディナリティでvertexプロパティの値を更新する
phaniが提供するソリューションに関して、次のコードは私のためには機能しませんでしたが、挿入部分は機能しましたが、削除部分は機能しませんでした。
keywords = keywordExtractor.getKeywords(getId(nextVertex))
if (keywords.size() > 0) {
nextVertex.property(VertexProperty.Cardinality.single, "post_keyword", keywords.get(0));
keywords.remove(0);
for (String keyword : keywords) {
nextVertex.property(VertexProperty.Cardinality.list, "post_keyword", keyword);
}
}
nextVertex.graph().tx().commit();
また、以下で提供されるJasonが提供するソリューションは、いずれも機能しませんでした。問題は削除部分にありました。
keywords = keywordExtractor.getKeywords(getId(nextVertex))
if (keywords.size() > 0) {
nextVertex.graph().traversal().V(nextVertex).properties("post_keyword").drop().iterate();
for (String keyword : keywords) {
nextVertex.property("post_keyword", keyword);
}
}
nextVertex.graph().tx().commit();
また、以下の解決策も調査しました。どちらもうまくいきませんでした。
keywords = keywordExtractor.getKeywords(getId(nextVertex))
if (keywords.size() > 0) {
Iterator<VertexProperty<Object>> iter = nextVertex.properties("post_keyword");
while(iter.hasNext()){
iter.next().remove();
}
for (String keyword : keywords) {
nextVertex.property("post_keyword", keyword);
}
}
nextVertex.graph().tx().commit();
残念ながら、あなたのソリューションは私のためには機能しませんでした。 –