我正在使用titan 1.0.0-hadoop1。我正在尝试将一些属性列表添加到我正在创建的Vertex中。在早期版本(如0.5.4)中,您可以直接使用setProperty添加属性,但在最新的API中,我发现很难添加属性。我甚至无法在互联网上找到正确的解决方案。
请帮我在Titan Java API中将属性添加到Vertex。
答案 0 :(得分:1)
一个例子会有所帮助:
Vertex vertex = graph.addVertex();
vertex.property("ID", "123"); //Creates ID property with value 123
创建属性。 要查询属性:
vertex.property("ID"); //Returns the property object
vertex.value("ID"); //Returns "123"
vertex.values(); //Returns all the values of all the properties
当您难以理解Titan API时。我建议查看TinkerPop API。 Titan实现了它,所以所有tinkerpop命令都适用于titan图。
答案 1 :(得分:0)
我也在使用带有cassandra存储后端的 titan 1.0.0 图形数据库,从0.5.4版本升级后也遇到了同样的问题。我找到了使用此方法将任何Collection
对象(Set
或List
)添加到顶点属性的简单通用解决方案。
public static void setMultiElementProperties(TitanElement element, String key, Collection collection) {
if (element != null && key != null && collection != null) {
// Put item from collection to the property of type Cardinality.LIST or Cardinality.SET
for (Object item : collection) {
if (item != null)
element.property(key, item);
}
}
}
使用 Java 8 语法的相同方法实现:
public static void setMultiElementProperties(TitanElement element, String key, Collection collection) {
if (element != null && key != null && collection != null) {
// Put item from collection to the property of type Cardinality.LIST or Cardinality.SET
collection.stream().filter(item -> item != null).forEach(item -> element.property(key, item));
}
}
TitanElement
对象是TitanVertex
和TitanEdge
对象的父对象,因此您可以将顶点或边传递给此方法。当然,您需要首先使用 Cardinality.Set 或 Cardinality.List 使用TitanManagement声明元素属性以使用多值属性。
TitanManagement tm = tittanGraph.openManagement();
tm.makePropertyKey(key).cardinality(Cardinality.LIST).make();// or Cardinality.SET
tm.commit();
要从element属性中检索集合,您可以使用:
Iterator<Object> collectionIter = element.values(key);
这是Java 8迭代它的方法:
List<Object> myList = new ArrayList<>();
collectionIter.forEachRemaining(item -> myList.add(item));