Skip to content

Version 1.7 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot. For up-to-date documentation, see the latest version.

HugeGraph-Java-Client

1 Overview

HugeGraph Java Client translates Java APIs into REST requests to HugeGraph Server. It supports managing schemas and graph data, executing Gremlin queries, and calling Traverser APIs. See the Client API for detailed interfaces; this page shows how to use the client in a Java project.

For other languages, use the Go Client or the Python Client maintained in the HugeGraph-AI repository.

2 What You Need

  • JDK 11 (used by the current CI; the source target remains Java 8)
  • Maven 3.6+

3 How To Use

The basic steps to use HugeGraph-Client are as follows:

  • Build a new Maven project by IDEA or Eclipse
  • Add HugeGraph-Client dependency in a pom file;
  • Create an object to invoke the interface of HugeGraph-Client

See the complete example in the following section for the detail.

4 Complete Example

4.1 Build New Maven Project

Using IDEA or Eclipse to create the project:

4.2 Add Hugegraph-Client Dependency In POM

1<dependencies>
2    <dependency>
3        <groupId>org.apache.hugegraph</groupId>
4        <artifactId>hugegraph-client</artifactId>
5        <!-- Select a released version from the download page -->
6        <version>1.7.0</version>
7    </dependency>    
8</dependencies>

Development versions of the client and server may differ. Check the corresponding release notes for compatibility before upgrading.

4.3 Example

4.3.1 SingleExample
  1import java.io.IOException;
  2import java.util.Iterator;
  3import java.util.List;
  4
  5import org.apache.hugegraph.driver.GraphManager;
  6import org.apache.hugegraph.driver.GremlinManager;
  7import org.apache.hugegraph.driver.HugeClient;
  8import org.apache.hugegraph.driver.SchemaManager;
  9import org.apache.hugegraph.structure.constant.T;
 10import org.apache.hugegraph.structure.graph.Edge;
 11import org.apache.hugegraph.structure.graph.Path;
 12import org.apache.hugegraph.structure.graph.Vertex;
 13import org.apache.hugegraph.structure.gremlin.Result;
 14import org.apache.hugegraph.structure.gremlin.ResultSet;
 15
 16public class SingleExample {
 17
 18    public static void main(String[] args) throws IOException {
 19        // If connect failed will throw a exception.
 20        HugeClient hugeClient = HugeClient.builder("http://localhost:8080",
 21                                                   "DEFAULT",
 22                                                   "hugegraph")
 23                                          .configUser("username", "password")
 24                                          // This is an example. In a production environment, secure credentials should be used.
 25                                          .build();
 26
 27        SchemaManager schema = hugeClient.schema();
 28
 29        schema.propertyKey("name").asText().ifNotExist().create();
 30        schema.propertyKey("age").asInt().ifNotExist().create();
 31        schema.propertyKey("city").asText().ifNotExist().create();
 32        schema.propertyKey("weight").asDouble().ifNotExist().create();
 33        schema.propertyKey("lang").asText().ifNotExist().create();
 34        schema.propertyKey("date").asDate().ifNotExist().create();
 35        schema.propertyKey("price").asInt().ifNotExist().create();
 36
 37        schema.vertexLabel("person")
 38              .properties("name", "age", "city")
 39              .primaryKeys("name")
 40              .ifNotExist()
 41              .create();
 42
 43        schema.vertexLabel("software")
 44              .properties("name", "lang", "price")
 45              .primaryKeys("name")
 46              .ifNotExist()
 47              .create();
 48
 49        schema.indexLabel("personByCity")
 50              .onV("person")
 51              .by("city")
 52              .secondary()
 53              .ifNotExist()
 54              .create();
 55
 56        schema.indexLabel("personByAgeAndCity")
 57              .onV("person")
 58              .by("age", "city")
 59              .secondary()
 60              .ifNotExist()
 61              .create();
 62
 63        schema.indexLabel("softwareByPrice")
 64              .onV("software")
 65              .by("price")
 66              .range()
 67              .ifNotExist()
 68              .create();
 69
 70        schema.edgeLabel("knows")
 71              .sourceLabel("person")
 72              .targetLabel("person")
 73              .properties("date", "weight")
 74              .ifNotExist()
 75              .create();
 76
 77        schema.edgeLabel("created")
 78              .sourceLabel("person").targetLabel("software")
 79              .properties("date", "weight")
 80              .ifNotExist()
 81              .create();
 82
 83        schema.indexLabel("createdByDate")
 84              .onE("created")
 85              .by("date")
 86              .secondary()
 87              .ifNotExist()
 88              .create();
 89
 90        schema.indexLabel("createdByWeight")
 91              .onE("created")
 92              .by("weight")
 93              .range()
 94              .ifNotExist()
 95              .create();
 96
 97        schema.indexLabel("knowsByWeight")
 98              .onE("knows")
 99              .by("weight")
100              .range()
101              .ifNotExist()
102              .create();
103
104        GraphManager graph = hugeClient.graph();
105        Vertex marko = graph.addVertex(T.LABEL, "person", "name", "marko",
106                                       "age", 29, "city", "Beijing");
107        Vertex vadas = graph.addVertex(T.LABEL, "person", "name", "vadas",
108                                       "age", 27, "city", "Hongkong");
109        Vertex lop = graph.addVertex(T.LABEL, "software", "name", "lop",
110                                     "lang", "java", "price", 328);
111        Vertex josh = graph.addVertex(T.LABEL, "person", "name", "josh",
112                                      "age", 32, "city", "Beijing");
113        Vertex ripple = graph.addVertex(T.LABEL, "software", "name", "ripple",
114                                        "lang", "java", "price", 199);
115        Vertex peter = graph.addVertex(T.LABEL, "person", "name", "peter",
116                                       "age", 35, "city", "Shanghai");
117
118        marko.addEdge("knows", vadas, "date", "2016-01-10", "weight", 0.5);
119        marko.addEdge("knows", josh, "date", "2013-02-20", "weight", 1.0);
120        marko.addEdge("created", lop, "date", "2017-12-10", "weight", 0.4);
121        josh.addEdge("created", lop, "date", "2009-11-11", "weight", 0.4);
122        josh.addEdge("created", ripple, "date", "2017-12-10", "weight", 1.0);
123        peter.addEdge("created", lop, "date", "2017-03-24", "weight", 0.2);
124
125        GremlinManager gremlin = hugeClient.gremlin();
126        System.out.println("==== Path ====");
127        ResultSet resultSet = gremlin.gremlin("g.V().outE().path()").execute();
128        Iterator<Result> results = resultSet.iterator();
129        results.forEachRemaining(result -> {
130            System.out.println(result.getObject().getClass());
131            Object object = result.getObject();
132            if (object instanceof Vertex) {
133                System.out.println(((Vertex) object).id());
134            } else if (object instanceof Edge) {
135                System.out.println(((Edge) object).id());
136            } else if (object instanceof Path) {
137                List<Object> elements = ((Path) object).objects();
138                elements.forEach(element -> {
139                    System.out.println(element.getClass());
140                    System.out.println(element);
141                });
142            } else {
143                System.out.println(object);
144            }
145        });
146
147        hugeClient.close();
148    }
149}
4.3.2 BatchExample
  1import java.util.ArrayList;
  2import java.util.List;
  3
  4import org.apache.hugegraph.driver.GraphManager;
  5import org.apache.hugegraph.driver.HugeClient;
  6import org.apache.hugegraph.driver.SchemaManager;
  7import org.apache.hugegraph.structure.graph.Edge;
  8import org.apache.hugegraph.structure.graph.Vertex;
  9
 10public class BatchExample {
 11
 12    public static void main(String[] args) {
 13        HugeClient hugeClient = HugeClient.builder("http://localhost:8080",
 14                                                   "DEFAULT",
 15                                                   "hugegraph")
 16                                          .configUser("username", "password")
 17                                          // This is an example. In a production environment, secure credentials should be used.
 18                                          .build();
 19
 20        SchemaManager schema = hugeClient.schema();
 21
 22        schema.propertyKey("name").asText().ifNotExist().create();
 23        schema.propertyKey("age").asInt().ifNotExist().create();
 24        schema.propertyKey("lang").asText().ifNotExist().create();
 25        schema.propertyKey("date").asDate().ifNotExist().create();
 26        schema.propertyKey("price").asInt().ifNotExist().create();
 27
 28        schema.vertexLabel("person")
 29              .properties("name", "age")
 30              .primaryKeys("name")
 31              .ifNotExist()
 32              .create();
 33
 34        schema.vertexLabel("person")
 35              .properties("price")
 36              .nullableKeys("price")
 37              .append();
 38
 39        schema.vertexLabel("software")
 40              .properties("name", "lang", "price")
 41              .primaryKeys("name")
 42              .ifNotExist()
 43              .create();
 44
 45        schema.indexLabel("softwareByPrice")
 46              .onV("software").by("price")
 47              .range()
 48              .ifNotExist()
 49              .create();
 50
 51        schema.edgeLabel("knows")
 52              .link("person", "person")
 53              .properties("date")
 54              .ifNotExist()
 55              .create();
 56
 57        schema.edgeLabel("created")
 58              .link("person", "software")
 59              .properties("date")
 60              .ifNotExist()
 61              .create();
 62
 63        schema.indexLabel("createdByDate")
 64              .onE("created").by("date")
 65              .secondary()
 66              .ifNotExist()
 67              .create();
 68
 69        // get schema object by name
 70        System.out.println(schema.getPropertyKey("name"));
 71        System.out.println(schema.getVertexLabel("person"));
 72        System.out.println(schema.getEdgeLabel("knows"));
 73        System.out.println(schema.getIndexLabel("createdByDate"));
 74
 75        // list all schema objects
 76        System.out.println(schema.getPropertyKeys());
 77        System.out.println(schema.getVertexLabels());
 78        System.out.println(schema.getEdgeLabels());
 79        System.out.println(schema.getIndexLabels());
 80
 81        GraphManager graph = hugeClient.graph();
 82
 83        Vertex marko = new Vertex("person").property("name", "marko")
 84                                           .property("age", 29);
 85        Vertex vadas = new Vertex("person").property("name", "vadas")
 86                                           .property("age", 27);
 87        Vertex lop = new Vertex("software").property("name", "lop")
 88                                           .property("lang", "java")
 89                                           .property("price", 328);
 90        Vertex josh = new Vertex("person").property("name", "josh")
 91                                          .property("age", 32);
 92        Vertex ripple = new Vertex("software").property("name", "ripple")
 93                                              .property("lang", "java")
 94                                              .property("price", 199);
 95        Vertex peter = new Vertex("person").property("name", "peter")
 96                                           .property("age", 35);
 97
 98        Edge markoKnowsVadas = new Edge("knows").source(marko).target(vadas)
 99                                                .property("date", "2016-01-10");
100        Edge markoKnowsJosh = new Edge("knows").source(marko).target(josh)
101                                               .property("date", "2013-02-20");
102        Edge markoCreateLop = new Edge("created").source(marko).target(lop)
103                                                 .property("date",
104                                                           "2017-12-10");
105        Edge joshCreateRipple = new Edge("created").source(josh).target(ripple)
106                                                   .property("date",
107                                                             "2017-12-10");
108        Edge joshCreateLop = new Edge("created").source(josh).target(lop)
109                                                .property("date", "2009-11-11");
110        Edge peterCreateLop = new Edge("created").source(peter).target(lop)
111                                                 .property("date",
112                                                           "2017-03-24");
113
114        List<Vertex> vertices = new ArrayList<>();
115        vertices.add(marko);
116        vertices.add(vadas);
117        vertices.add(lop);
118        vertices.add(josh);
119        vertices.add(ripple);
120        vertices.add(peter);
121
122        List<Edge> edges = new ArrayList<>();
123        edges.add(markoKnowsVadas);
124        edges.add(markoKnowsJosh);
125        edges.add(markoCreateLop);
126        edges.add(joshCreateRipple);
127        edges.add(joshCreateLop);
128        edges.add(peterCreateLop);
129
130        vertices = graph.addVertices(vertices);
131        vertices.forEach(vertex -> System.out.println(vertex));
132
133        edges = graph.addEdges(edges, false);
134        edges.forEach(edge -> System.out.println(edge));
135
136        hugeClient.close();
137    }
138}

4.4 Run The Example

Before running Example, you need to start the Server. For the startup process, seeHugeGraph-Server Quick Start.

4.5 More Information About Client-API

SeeIntroduce basic API of HugeGraph-Client.