2017-04-21 21:07:21 +08:00
|
|
|
package com.baidu.hugegraph.example;
|
|
|
|
|
|
2017-05-09 10:59:50 +08:00
|
|
|
import java.util.List;
|
|
|
|
|
|
2017-07-03 16:51:51 +08:00
|
|
|
import org.apache.tinkerpop.gremlin.process.traversal.P;
|
|
|
|
|
import org.apache.tinkerpop.gremlin.process.traversal.Path;
|
2017-04-21 21:07:21 +08:00
|
|
|
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
|
2017-07-03 16:51:51 +08:00
|
|
|
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
|
2017-04-21 21:07:21 +08:00
|
|
|
import org.apache.tinkerpop.gremlin.structure.Edge;
|
|
|
|
|
import org.apache.tinkerpop.gremlin.structure.T;
|
|
|
|
|
import org.apache.tinkerpop.gremlin.structure.Vertex;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
|
|
import com.baidu.hugegraph.HugeGraph;
|
2017-05-09 10:59:50 +08:00
|
|
|
import com.baidu.hugegraph.schema.SchemaElement;
|
2017-04-21 21:07:21 +08:00
|
|
|
import com.baidu.hugegraph.schema.SchemaManager;
|
2017-05-09 18:22:32 +08:00
|
|
|
import com.baidu.hugegraph.type.schema.EdgeLabel;
|
|
|
|
|
import com.baidu.hugegraph.type.schema.VertexLabel;
|
2017-04-21 21:07:21 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Created by jishilei on 2017/4/2.
|
|
|
|
|
*/
|
|
|
|
|
public class Example2 {
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(Example2.class);
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
logger.info("Example2 start!");
|
2017-06-13 13:47:15 +08:00
|
|
|
|
|
|
|
|
HugeGraph graph = ExampleUtil.loadGraph();
|
|
|
|
|
|
2017-04-21 21:07:21 +08:00
|
|
|
Example2.load(graph);
|
2017-05-09 10:59:50 +08:00
|
|
|
showSchema(graph);
|
2017-04-27 16:47:20 +08:00
|
|
|
traversal(graph);
|
2017-05-09 10:59:50 +08:00
|
|
|
|
2017-04-21 21:07:21 +08:00
|
|
|
System.exit(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void traversal(final HugeGraph graph) {
|
|
|
|
|
|
2017-04-27 16:47:20 +08:00
|
|
|
GraphTraversal<Vertex, Vertex> vertexs = graph.traversal().V();
|
2017-06-08 19:41:59 +08:00
|
|
|
System.out.println(">>>> query all vertices: size="
|
|
|
|
|
+ vertexs.toList().size());
|
2017-04-27 16:47:20 +08:00
|
|
|
|
|
|
|
|
GraphTraversal<Edge, Edge> edges = graph.traversal().E();
|
2017-06-08 19:41:59 +08:00
|
|
|
System.out.println(">>>> query all edges: size="
|
|
|
|
|
+ edges.toList().size());
|
|
|
|
|
|
|
|
|
|
List<Object> names = graph.traversal().V().inE(
|
|
|
|
|
"knows").limit(2).outV().values("name").toList();
|
2017-06-09 20:20:53 +08:00
|
|
|
System.out.println(">>>> query vertex(with props) of edges: "
|
2017-06-08 19:41:59 +08:00
|
|
|
+ names);
|
2017-06-09 20:20:53 +08:00
|
|
|
assert names.size() == 2 : names.size();
|
|
|
|
|
|
|
|
|
|
names = graph.traversal().V().as("a")
|
|
|
|
|
.out("knows")
|
|
|
|
|
.and()
|
|
|
|
|
.out("created").in("created").as("a").values("name")
|
|
|
|
|
.toList();
|
|
|
|
|
System.out.println(">>>> query with AND: " + names);
|
|
|
|
|
assert names.size() == 1 : names.size();
|
2017-07-03 16:51:51 +08:00
|
|
|
|
2017-07-04 20:05:11 +08:00
|
|
|
System.out.println(graph.traversal().V()
|
|
|
|
|
.has("age", 29)
|
|
|
|
|
.toList());
|
|
|
|
|
|
|
|
|
|
System.out.println(graph.traversal().V()
|
|
|
|
|
.has("age", 29)
|
|
|
|
|
.has("city", "Beijing")
|
|
|
|
|
.toList());
|
|
|
|
|
|
|
|
|
|
System.out.println(graph.traversal().E()
|
|
|
|
|
.has("city", "Beijing")
|
|
|
|
|
.toList());
|
|
|
|
|
|
2017-07-21 19:38:33 +08:00
|
|
|
List<Path> paths = graph.traversal().V("person:marko")
|
2017-07-03 16:51:51 +08:00
|
|
|
.out().out().path().by("name").toList();
|
|
|
|
|
System.out.println(">>>> test out path: " + paths);
|
|
|
|
|
assert paths.size() == 2;
|
|
|
|
|
assert paths.get(0).get(0).equals("marko");
|
|
|
|
|
assert paths.get(0).get(1).equals("josh");
|
|
|
|
|
assert paths.get(0).get(2).equals("lop");
|
|
|
|
|
assert paths.get(1).get(0).equals("marko");
|
|
|
|
|
assert paths.get(1).get(1).equals("josh");
|
|
|
|
|
assert paths.get(1).get(2).equals("ripple");
|
|
|
|
|
|
2017-07-21 19:38:33 +08:00
|
|
|
paths = shortestPath(graph, "person:marko", "software:lop", 5);
|
2017-07-03 16:51:51 +08:00
|
|
|
System.out.println(">>>> test shortest path: " + paths.get(0));
|
|
|
|
|
assert paths.get(0).get(0).equals("marko");
|
|
|
|
|
assert paths.get(0).get(1).equals("lop");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static List<Path> shortestPath(final HugeGraph graph,
|
|
|
|
|
Object from, Object to, int maxDepth) {
|
|
|
|
|
GraphTraversal<Vertex, Path> t = graph.traversal()
|
|
|
|
|
.V(from)
|
|
|
|
|
.repeat(__.out().simplePath())
|
|
|
|
|
.until(__.hasId(to).or().loops().is(P.gt(maxDepth)))
|
|
|
|
|
.hasId(to)
|
|
|
|
|
.path().by("name")
|
|
|
|
|
.limit(1);
|
|
|
|
|
return t.toList();
|
2017-04-21 21:07:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void showSchema(final HugeGraph graph) {
|
2017-04-26 14:10:42 +08:00
|
|
|
SchemaManager schemaManager = graph.schema();
|
2017-04-21 21:07:21 +08:00
|
|
|
|
|
|
|
|
logger.info("=============== show schema ================");
|
|
|
|
|
|
2017-05-09 10:59:50 +08:00
|
|
|
List<SchemaElement> elements = schemaManager.desc();
|
|
|
|
|
for (SchemaElement element : elements) {
|
|
|
|
|
System.out.println(element.schema());
|
|
|
|
|
}
|
2017-04-21 21:07:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void load(final HugeGraph graph) {
|
2017-04-26 14:10:42 +08:00
|
|
|
SchemaManager schema = graph.schema();
|
2017-04-21 21:07:21 +08:00
|
|
|
|
2017-04-27 16:47:20 +08:00
|
|
|
/**
|
|
|
|
|
* Note:
|
|
|
|
|
* Use schema.makePropertyKey interface to create propertyKey.
|
|
|
|
|
* Use schema.propertyKey interface to query propertyKey.
|
|
|
|
|
*/
|
2017-05-11 11:23:15 +08:00
|
|
|
schema.makePropertyKey("name").asText().ifNotExist().create();
|
|
|
|
|
schema.makePropertyKey("age").asInt().ifNotExist().create();
|
2017-07-04 20:05:11 +08:00
|
|
|
schema.makePropertyKey("city").asText().ifNotExist().create();
|
2017-05-11 11:23:15 +08:00
|
|
|
schema.makePropertyKey("lang").asText().ifNotExist().create();
|
|
|
|
|
schema.makePropertyKey("date").asText().ifNotExist().create();
|
2017-05-17 10:53:05 +08:00
|
|
|
schema.makePropertyKey("price").asInt().ifNotExist().create();
|
2017-04-27 16:47:20 +08:00
|
|
|
|
2017-05-09 18:22:32 +08:00
|
|
|
VertexLabel person = schema.makeVertexLabel("person")
|
2017-07-04 20:05:11 +08:00
|
|
|
.properties("name", "age", "city")
|
2017-05-09 18:22:32 +08:00
|
|
|
.primaryKeys("name")
|
2017-05-11 11:23:15 +08:00
|
|
|
.ifNotExist()
|
2017-05-09 18:22:32 +08:00
|
|
|
.create();
|
2017-04-26 20:25:50 +08:00
|
|
|
|
2017-05-09 18:22:32 +08:00
|
|
|
VertexLabel software = schema.makeVertexLabel("software")
|
2017-05-17 10:53:05 +08:00
|
|
|
.properties("name", "lang", "price")
|
2017-05-09 18:22:32 +08:00
|
|
|
.primaryKeys("name")
|
2017-05-11 11:23:15 +08:00
|
|
|
.ifNotExist()
|
2017-05-09 18:22:32 +08:00
|
|
|
.create();
|
2017-04-21 21:07:21 +08:00
|
|
|
|
2017-06-02 10:48:16 +08:00
|
|
|
schema.makeIndexLabel("personByName").on(person).by("name").secondary()
|
2017-05-27 10:29:30 +08:00
|
|
|
.ifNotExist().create();
|
2017-05-09 18:22:32 +08:00
|
|
|
|
2017-07-04 20:05:11 +08:00
|
|
|
schema.makeIndexLabel("personByAge").on(person).by("age").search()
|
|
|
|
|
.ifNotExist().create();
|
|
|
|
|
|
|
|
|
|
schema.makeIndexLabel("personByCity").on(person).by("city").secondary()
|
|
|
|
|
.ifNotExist().create();
|
|
|
|
|
|
|
|
|
|
schema.makeIndexLabel("personByAgeAndCityAndName").on(person)
|
|
|
|
|
.by("age", "city", "name")
|
|
|
|
|
.secondary()
|
|
|
|
|
.ifNotExist().create();
|
|
|
|
|
|
2017-06-02 10:48:16 +08:00
|
|
|
schema.makeIndexLabel("softwareByPrice").on(software).by("price").search()
|
2017-05-27 10:29:30 +08:00
|
|
|
.ifNotExist().create();
|
2017-05-09 18:22:32 +08:00
|
|
|
|
2017-05-27 10:29:30 +08:00
|
|
|
schema.makeEdgeLabel("knows").link("person", "person")
|
|
|
|
|
.properties("date").create();
|
2017-05-09 18:22:32 +08:00
|
|
|
|
2017-06-13 15:25:14 +08:00
|
|
|
schema.makeEdgeLabel("knows").link("software", "software")
|
|
|
|
|
.properties("price").append();
|
|
|
|
|
|
2017-05-09 18:22:32 +08:00
|
|
|
EdgeLabel created = schema.makeEdgeLabel("created")
|
|
|
|
|
.link("person", "software")
|
2017-07-04 20:05:11 +08:00
|
|
|
.properties("date", "city")
|
2017-05-11 11:23:15 +08:00
|
|
|
.ifNotExist()
|
2017-05-09 18:22:32 +08:00
|
|
|
.create();
|
|
|
|
|
|
2017-06-02 10:48:16 +08:00
|
|
|
schema.makeIndexLabel("createdByDate").on(created).by("date").secondary()
|
2017-05-11 11:23:15 +08:00
|
|
|
.ifNotExist()
|
2017-05-09 18:22:32 +08:00
|
|
|
.create();
|
2017-04-21 21:07:21 +08:00
|
|
|
|
2017-07-04 20:05:11 +08:00
|
|
|
schema.makeIndexLabel("createdByCity").on(created)
|
|
|
|
|
.by("city")
|
|
|
|
|
.secondary()
|
|
|
|
|
.ifNotExist().create();
|
|
|
|
|
|
2017-05-03 13:01:21 +08:00
|
|
|
schema.desc();
|
2017-04-27 16:47:20 +08:00
|
|
|
|
2017-04-26 18:31:37 +08:00
|
|
|
graph.tx().open();
|
2017-04-28 15:29:54 +08:00
|
|
|
|
2017-05-27 10:29:30 +08:00
|
|
|
Vertex marko = graph.addVertex(T.label, "person",
|
2017-07-04 20:05:11 +08:00
|
|
|
"name", "marko", "age", 29, "city", "Beijing");
|
2017-05-27 10:29:30 +08:00
|
|
|
Vertex vadas = graph.addVertex(T.label, "person",
|
2017-07-21 19:38:33 +08:00
|
|
|
"name", "vadas", "age", 27, "city", "Hongkong");
|
2017-05-27 10:29:30 +08:00
|
|
|
Vertex lop = graph.addVertex(T.label, "software",
|
|
|
|
|
"name", "lop", "lang", "java", "price", 328);
|
|
|
|
|
Vertex josh = graph.addVertex(T.label, "person",
|
2017-07-04 20:05:11 +08:00
|
|
|
"name", "josh", "age", 32, "city", "Beijing");
|
2017-05-27 10:29:30 +08:00
|
|
|
Vertex ripple = graph.addVertex(T.label, "software",
|
|
|
|
|
"name", "ripple", "lang", "java", "price", 199);
|
|
|
|
|
Vertex peter = graph.addVertex(T.label, "person",
|
2017-07-04 20:05:11 +08:00
|
|
|
"name", "peter", "age", 29, "city", "Shanghai");
|
2017-04-26 14:10:42 +08:00
|
|
|
|
2017-04-26 20:25:50 +08:00
|
|
|
marko.addEdge("knows", vadas, "date", "20160110");
|
|
|
|
|
marko.addEdge("knows", josh, "date", "20130220");
|
2017-07-04 20:05:11 +08:00
|
|
|
marko.addEdge("created", lop, "date", "20171210", "city", "Shanghai");
|
|
|
|
|
josh.addEdge("created", ripple, "date", "20171210", "city", "Beijing");
|
|
|
|
|
josh.addEdge("created", lop, "date", "20091111", "city", "Beijing");
|
|
|
|
|
peter.addEdge("created", lop, "date", "20170324", "city", "Hongkong");
|
2017-04-25 20:08:57 +08:00
|
|
|
|
2017-04-26 14:10:42 +08:00
|
|
|
graph.tx().commit();
|
2017-04-21 21:07:21 +08:00
|
|
|
}
|
|
|
|
|
}
|