use of com.baidu.hugegraph.traversal.algorithm.steps.EdgeStep in project incubator-hugegraph by apache.
the class MultiNodeShortestPathAPI method post.
@POST
@Timed
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON_WITH_CHARSET)
public String post(@Context GraphManager manager, @PathParam("graph") String graph, Request request) {
E.checkArgumentNotNull(request, "The request body can't be null");
E.checkArgumentNotNull(request.vertices, "The vertices of request can't be null");
E.checkArgument(request.step != null, "The steps of request can't be null");
LOG.debug("Graph [{}] get multiple node shortest path from " + "vertices '{}', with step '{}', max_depth '{}', capacity " + "'{}' and with_vertex '{}'", graph, request.vertices, request.step, request.maxDepth, request.capacity, request.withVertex);
HugeGraph g = graph(manager, graph);
Iterator<Vertex> vertices = request.vertices.vertices(g);
EdgeStep step = step(g, request.step);
List<HugeTraverser.Path> paths;
try (MultiNodeShortestPathTraverser traverser = new MultiNodeShortestPathTraverser(g)) {
paths = traverser.multiNodeShortestPath(vertices, step, request.maxDepth, request.capacity);
}
if (!request.withVertex) {
return manager.serializer(g).writePaths("paths", paths, false);
}
Set<Id> ids = new HashSet<>();
for (HugeTraverser.Path p : paths) {
ids.addAll(p.vertices());
}
Iterator<Vertex> iter = QueryResults.emptyIterator();
if (!ids.isEmpty()) {
iter = g.vertices(ids.toArray());
}
return manager.serializer(g).writePaths("paths", paths, false, iter);
}
use of com.baidu.hugegraph.traversal.algorithm.steps.EdgeStep in project incubator-hugegraph by apache.
the class PathsAPI method post.
@POST
@Timed
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON_WITH_CHARSET)
public String post(@Context GraphManager manager, @PathParam("graph") String graph, Request request) {
E.checkArgumentNotNull(request, "The request body can't be null");
E.checkArgumentNotNull(request.sources, "The sources of request can't be null");
E.checkArgumentNotNull(request.targets, "The targets of request can't be null");
E.checkArgumentNotNull(request.step, "The step of request can't be null");
E.checkArgument(request.depth > 0 && request.depth <= DEFAULT_MAX_DEPTH, "The depth of request must be in (0, %s], " + "but got: %s", DEFAULT_MAX_DEPTH, request.depth);
LOG.debug("Graph [{}] get paths from source vertices '{}', target " + "vertices '{}', with step '{}', max depth '{}', " + "capacity '{}', limit '{}' and with_vertex '{}'", graph, request.sources, request.targets, request.step, request.depth, request.capacity, request.limit, request.withVertex);
HugeGraph g = graph(manager, graph);
Iterator<Vertex> sources = request.sources.vertices(g);
Iterator<Vertex> targets = request.targets.vertices(g);
EdgeStep step = step(g, request.step);
CollectionPathsTraverser traverser = new CollectionPathsTraverser(g);
Collection<HugeTraverser.Path> paths;
paths = traverser.paths(sources, targets, step, request.depth, request.nearest, request.capacity, request.limit);
if (!request.withVertex) {
return manager.serializer(g).writePaths("paths", paths, false);
}
Set<Id> ids = new HashSet<>();
for (HugeTraverser.Path p : paths) {
ids.addAll(p.vertices());
}
Iterator<Vertex> iter = QueryResults.emptyIterator();
if (!ids.isEmpty()) {
iter = g.vertices(ids.toArray());
}
return manager.serializer(g).writePaths("paths", paths, false, iter);
}
use of com.baidu.hugegraph.traversal.algorithm.steps.EdgeStep in project incubator-hugegraph by apache.
the class CountAPI method post.
@POST
@Timed
@Produces(APPLICATION_JSON_WITH_CHARSET)
public String post(@Context GraphManager manager, @PathParam("graph") String graph, CountRequest request) {
LOG.debug("Graph [{}] get count from '{}' with request {}", graph, request);
E.checkArgumentNotNull(request.source, "The source of request can't be null");
Id sourceId = HugeVertex.getIdValue(request.source);
E.checkArgumentNotNull(request.steps != null && !request.steps.isEmpty(), "The steps of request can't be null or empty");
E.checkArgumentNotNull(request.dedupSize == NO_LIMIT || request.dedupSize >= 0L, "The dedup size of request " + "must >= 0 or == -1, but got: '%s'", request.dedupSize);
HugeGraph g = graph(manager, graph);
List<EdgeStep> steps = steps(g, request);
CountTraverser traverser = new CountTraverser(g);
long count = traverser.count(sourceId, steps, request.containsTraversed, request.dedupSize);
return manager.serializer(g).writeMap(ImmutableMap.of("count", count));
}
use of com.baidu.hugegraph.traversal.algorithm.steps.EdgeStep in project incubator-hugegraph by apache.
the class PredictionTraverser method adamicAdar.
public double adamicAdar(Id source, Id target, Directions dir, String label, long degree, long limit) {
Set<Id> neighbors = checkAndGetCommonNeighbors(source, target, dir, label, degree, limit);
EdgeStep step = label == null ? new EdgeStep(graph(), dir) : new EdgeStep(graph(), dir, ImmutableList.of(label));
double sum = 0.0;
for (Id vid : neighbors) {
long currentDegree = this.edgesCount(vid, step);
if (currentDegree > 0) {
sum += 1.0 / Math.log(currentDegree);
}
}
return sum;
}
use of com.baidu.hugegraph.traversal.algorithm.steps.EdgeStep in project incubator-hugegraph by apache.
the class PathTraverser method forward.
public void forward() {
EdgeStep currentStep = this.nextStep(true);
if (currentStep == null) {
return;
}
this.beforeTraverse(true);
// Traversal vertices of previous level
this.traverseOneLayer(this.sources, currentStep, this::forward);
this.afterTraverse(currentStep, true);
}
Aggregations