具有给定名称的顶点标签不存在
Vertex Label with given name does not exist
我正在尝试执行以下代码:
public class Friendster {
/**
* @param args
* @throws FileNotFoundException
*/
public static void load(final TitanGraph graph,String filePath) throws FileNotFoundException {
Scanner sc = new Scanner(new File(filePath));
System.out.println("Inside Load Function");
for (int i =0 ; sc.hasNext();i++)
{
TitanTransaction tx = graph.newTransaction();
String friendLine = sc.nextLine();
String friendList[]= friendLine.split(":");
if(friendList.length==1)
{
continue;
}
else if(friendList[1].equals("notfound"))
{
String human="human";
tx.addVertex(T.label, human, "Name", "Not Found","No of Friends",0);
// tx.commit();
}
else if(friendList[1].equals("private"))
{
String human="human";
tx.addVertex(T.label, human, "Name", ""+friendList[0],"No of Freinds", "Private");
System.out.println("Node Added : "+ friendList[0]);
// tx.commit();
}
else
{
String human="human";
int friends_count=friendList[1].split(",").length;
tx.addVertex(T.label, human, "Name", ""+friendList[0],"No of Friends",friends_count);
System.out.println("Node Added : "+ friendList[0]);
String totalList[]=friendList[1].split(",");
for(int j=0;j<totalList.length;j++)
{
Iterator<Vertex> itr2=graph.traversal().V().has("Name", ""+totalList[j]);
if(!itr2.hasNext())
{
tx.addVertex(T.label, human, "Name", ""+totalList[j],"No of Friends",999);
System.out.println("Node Added : "+ totalList[j]);
// tx.commit();
}
}
}
tx.commit();
}
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
TitanGraph g = TitanFactory.open("titan-cassandra.properties");
//LOADING FROM FILE
load(g,"/media/laxmikant/New Volume/friends.txt");
g.close();
}
}
此代码给出的错误为:
Exception in thread "main" java.lang.IllegalArgumentException: Vertex Label with given name does not exist: human
at com.thinkaurelius.titan.graphdb.types.typemaker.DisableDefaultSchemaMaker.makeVertexLabel(DisableDefaultSchemaMaker.java:37)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.getOrCreateVertexLabel(StandardTitanTx.java:988)
at com.thinkaurelius.titan.graphdb.tinkerpop.TitanBlueprintsTransaction.addVertex(TitanBlueprintsTransaction.java:101)
at Friendster.load(Friendster.java:79)
at Friendster.main(Friendster.java:133)
之前一直在正常执行,突然就开始报错了。
如果我们 运行 在 gremlin 中单独查询 shell 它不会给出错误,但在 java 代码中它会抛出错误,这是为什么?
这段代码有什么问题?
问题是您在 titan-cassandra.properties
文件中设置了 schema.default=none
,因此自动模式创建被禁用。禁用自动模式创建时,您需要先定义模式(包括顶点和边上的所有标签、属性和索引),然后才能使用它们。
有关如何定义架构的详细信息,请参阅 Titan 文档中的Chapter 5: Schema and Data Modeling。
当您将 storage.batch-loading 设置为 true 时,自动模式创建也会被禁用,您必须明确设置模式。
lazy val graph = TitanFactory.build()
.set("storage.backend", storage_backend)
.set("storage.hostname", "127.0.0.1")
.set("storage.cassandra.keyspace", "titan_graph_test")
.set("storage.batch-loading", "true") //this removes the consitency lock ,which don't work well with NSQL backends
.open()
mgmt.makePropertyKey(TIME).dataType(classOf[String]).cardinality(Cardinality.SET).make()
mgmt.makeEdgeLabel("interference").make()
请注意,目前使用 TitanGraph 时,这些设置似乎存在一个错误,该错误会阻止使用标签创建顶点 -- https://groups.google.com/d/msg/aureliusgraphs/lFW1buC1Hms/tBV_hUUoAAAJ
但是你可以创建一个没有标签的顶点并添加上面定义的属性
我正在尝试执行以下代码:
public class Friendster {
/**
* @param args
* @throws FileNotFoundException
*/
public static void load(final TitanGraph graph,String filePath) throws FileNotFoundException {
Scanner sc = new Scanner(new File(filePath));
System.out.println("Inside Load Function");
for (int i =0 ; sc.hasNext();i++)
{
TitanTransaction tx = graph.newTransaction();
String friendLine = sc.nextLine();
String friendList[]= friendLine.split(":");
if(friendList.length==1)
{
continue;
}
else if(friendList[1].equals("notfound"))
{
String human="human";
tx.addVertex(T.label, human, "Name", "Not Found","No of Friends",0);
// tx.commit();
}
else if(friendList[1].equals("private"))
{
String human="human";
tx.addVertex(T.label, human, "Name", ""+friendList[0],"No of Freinds", "Private");
System.out.println("Node Added : "+ friendList[0]);
// tx.commit();
}
else
{
String human="human";
int friends_count=friendList[1].split(",").length;
tx.addVertex(T.label, human, "Name", ""+friendList[0],"No of Friends",friends_count);
System.out.println("Node Added : "+ friendList[0]);
String totalList[]=friendList[1].split(",");
for(int j=0;j<totalList.length;j++)
{
Iterator<Vertex> itr2=graph.traversal().V().has("Name", ""+totalList[j]);
if(!itr2.hasNext())
{
tx.addVertex(T.label, human, "Name", ""+totalList[j],"No of Friends",999);
System.out.println("Node Added : "+ totalList[j]);
// tx.commit();
}
}
}
tx.commit();
}
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
TitanGraph g = TitanFactory.open("titan-cassandra.properties");
//LOADING FROM FILE
load(g,"/media/laxmikant/New Volume/friends.txt");
g.close();
}
}
此代码给出的错误为:
Exception in thread "main" java.lang.IllegalArgumentException: Vertex Label with given name does not exist: human
at com.thinkaurelius.titan.graphdb.types.typemaker.DisableDefaultSchemaMaker.makeVertexLabel(DisableDefaultSchemaMaker.java:37)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.getOrCreateVertexLabel(StandardTitanTx.java:988)
at com.thinkaurelius.titan.graphdb.tinkerpop.TitanBlueprintsTransaction.addVertex(TitanBlueprintsTransaction.java:101)
at Friendster.load(Friendster.java:79)
at Friendster.main(Friendster.java:133)
之前一直在正常执行,突然就开始报错了。
如果我们 运行 在 gremlin 中单独查询 shell 它不会给出错误,但在 java 代码中它会抛出错误,这是为什么?
这段代码有什么问题?
问题是您在 titan-cassandra.properties
文件中设置了 schema.default=none
,因此自动模式创建被禁用。禁用自动模式创建时,您需要先定义模式(包括顶点和边上的所有标签、属性和索引),然后才能使用它们。
有关如何定义架构的详细信息,请参阅 Titan 文档中的Chapter 5: Schema and Data Modeling。
当您将 storage.batch-loading 设置为 true 时,自动模式创建也会被禁用,您必须明确设置模式。
lazy val graph = TitanFactory.build() .set("storage.backend", storage_backend) .set("storage.hostname", "127.0.0.1") .set("storage.cassandra.keyspace", "titan_graph_test") .set("storage.batch-loading", "true") //this removes the consitency lock ,which don't work well with NSQL backends .open()
mgmt.makePropertyKey(TIME).dataType(classOf[String]).cardinality(Cardinality.SET).make()
mgmt.makeEdgeLabel("interference").make()
请注意,目前使用 TitanGraph 时,这些设置似乎存在一个错误,该错误会阻止使用标签创建顶点 -- https://groups.google.com/d/msg/aureliusgraphs/lFW1buC1Hms/tBV_hUUoAAAJ
但是你可以创建一个没有标签的顶点并添加上面定义的属性