incubator-hugegraph icon indicating copy to clipboard operation
incubator-hugegraph copied to clipboard

[Question] describe your problem

Open Tommu10ve opened this issue 6 months ago • 3 comments

Problem Type (问题类型)

None

Before submit

  • [x] 我已经确认现有的 IssuesFAQ 中没有相同 / 重复问题 (I have confirmed and searched that there are no similar problems in the historical issue and documents)

Environment (环境信息)

  • Server Version: 1.5.0 (Apache Release Version)
  • Backend: RocksDB 3 nodes, HDD or SSD
  • OS: 16 CPUs, 16 G RAM,CentOS 7.x
  • Data Size: 小图

Your Question (问题描述)

JAVA客户端 使用批量创建边 hugeClient.graph().addEdges(edgeList) 报错



org.apache.hugegraph.exception.ServerException: Expect source vertex label
	at org.apache.hugegraph.exception.ServerException.fromResponse(ServerException.java:45)
	at org.apache.hugegraph.client.RestClient.checkStatus(RestClient.java:93)
	at org.apache.hugegraph.rest.AbstractRestClient.post(AbstractRestClient.java:317)
	at org.apache.hugegraph.api.graph.EdgeAPI.create(EdgeAPI.java:55)
	at org.apache.hugegraph.driver.GraphManager.addEdges(GraphManager.java:262)
	at org.apache.hugegraph.driver.GraphManager.addEdges(GraphManager.java:254)
	at com.kd.lyp.service.NetworkFlowAnalysisService.insertDataDomainBatch(NetworkFlowAnalysisService.java:348)
	at com.kd.lyp.controller.NetworkFlowAnalysisController.insertDataDomainBatch(NetworkFlowAnalysisController.java:52)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
	at cn.dev33.satoken.filter.SaServletFilter.doFilter(SaServletFilter.java:150)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at cn.dev33.satoken.filter.SaServletFilter.doFilter(SaServletFilter.java:150)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at cn.dev33.satoken.filter.SaPathCheckFilterForJakartaServlet.doFilter(SaPathCheckFilterForJakartaServlet.java:55)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at com.kd.common.web.filter.XssFilter.doFilter(XssFilter.java:40)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:395)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:861)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1512)
	at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
	at java.base/java.lang.Thread.run(Thread.java:840)

Vertex/Edge example (问题点 / 边数据举例)


Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)


Tommu10ve avatar Jun 25 '25 04:06 Tommu10ve

你遇到的 “Expect source vertex label” 报错,通常是因为批量创建边时,edgeList 里的边数据缺少或错误指定了 source-label(源点类型名)。在 HugeGraph 中,创建边时必须明确指定 source-label 和 target-label,这两个字段必须是顶点类型(VertexLabel)的名称,而不是主键(primaryKey)的值。如果 edgeList 里 source-label 或 target-label 填写成了主键值,或者漏掉了顶点类型名,就会出现这个报错。

建议你检查 edgeList 里每个边对象,确保包含 source-label、target-label(均为 VertexLabel 名称)、sourceId、targetId 以及 edge label。如果你的顶点 ID 策略是 PRIMARY_KEY,可以用主键值拼接出顶点 ID,但 source-label 依然必须是类型名。相关说明可参考这里

如果还有问题,建议补充一份 edgeList 的示例数据和相关 schema(VertexLabel、EdgeLabel 定义),这样可以更具体地帮你定位问题。

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Join Discord Share on X

dosubot[bot] avatar Jun 25 '25 04:06 dosubot[bot]

hugeClient.graph().addEdges(edgeList) 使用案例? @dosu-bot

Tommu10ve avatar Jun 25 '25 05:06 Tommu10ve

下面是 HugeGraph Java 客户端批量创建边(addEdges)的标准用法案例,结合了实际测试代码和官方示例:

  1. 确保已定义好 VertexLabel 和 EdgeLabel,如:
schema.vertexLabel("person")
      .properties("name", "age")
      .primaryKeys("name")
      .ifNotExist()
      .create();

schema.vertexLabel("software")
      .properties("name", "lang", "price")
      .primaryKeys("name")
      .ifNotExist()
      .create();

schema.edgeLabel("created")
      .link("person", "software")
      .properties("date")
      .ifNotExist()
      .create();
  1. 创建顶点对象并批量插入(必须先插入顶点,边才能成功):
Vertex marko = new Vertex("person").property("name", "marko").property("age", 29);
Vertex lop = new Vertex("software").property("name", "lop").property("lang", "java").property("price", 328);

List<Vertex> vertices = Arrays.asList(marko, lop);
graph.addVertices(vertices);
  1. 创建边对象并批量插入
Edge markoCreateLop = new Edge("created")
    .source(marko)
    .target(lop)
    .property("date", "2017-12-10");

List<Edge> edges = Arrays.asList(markoCreateLop);
graph.addEdges(edges);
  1. 注意事项
  • Edge 的 source/target 必须是已存在的 Vertex 对象。
  • 必须先 addVertices,再 addEdges,否则会报错(如 InvalidOperationException)。
  • Edge 构造时 label、source、target、属性都要明确指定,label 必须是 schema 里定义的 EdgeLabel,source/target 的类型必须和 EdgeLabel 的 sourceLabel/targetLabel 匹配。
  • 支持批量插入 List<Edge>,也支持 List<Map<String, Object>>,但推荐用 Edge 对象,类型安全且易于维护。

完整示例可参考 BatchExample.javaBatchInsertTest.java

如需更复杂的属性或批量数据,可以循环构造 Vertex 和 Edge 对象,最后分别调用 addVertices 和 addEdges 即可。

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Join Discord Share on X

dosubot[bot] avatar Jun 25 '25 05:06 dosubot[bot]

Due to the lack of activity, the current issue is marked as stale and will be closed after 20 days, any update will remove the stale label

github-actions[bot] avatar Jul 10 '25 21:07 github-actions[bot]