Как получить вершины по краям с помощью Graph API (Tinkerpop Blueprints) в OrientDB?

Venaho Yun спросил: 10 мая 2018 в 04:03 в: java

Я очень новичок в OrientDB. Поскольку я разработчик Java, я выбрал Graph API в качестве соединителя для OrientDB.

Здесь я создал очень простой пример кода:

package launcher;import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx;
import com.tinkerpop.frames.FramedGraph;
import com.tinkerpop.frames.FramedGraphFactory;public class TinkerpopTest {    public static void main(String[] args) {        OrientGraphNoTx graph = new OrientGraphNoTx("memory:tinkerpop");
        FramedGraphFactory factory = new FramedGraphFactory();
        FramedGraph<Graph> manager = factory.create(graph);        Vertex marko = graph.addVertex("class:Person");
        marko.setProperty("name", "marko");
        marko.setProperty("age", 29);        Vertex vadas = graph.addVertex("class:Person");
        vadas.setProperty("name", "vadas");
        vadas.setProperty("age", 27);        Vertex lop = graph.addVertex("class:Person");
        lop.setProperty("name", "lop");
        lop.setProperty("lang", "java");        Vertex josh = graph.addVertex("class:Person");
        josh.setProperty("name", "josh");
        josh.setProperty("age", 32);        Vertex ripple = graph.addVertex("class:Person");
        ripple.setProperty("name", "ripple");
        ripple.setProperty("lang", "java");        Vertex peter = graph.addVertex("class:Person");
        peter.setProperty("name", "peter");
        peter.setProperty("age", 35);        graph.addEdge("class:Person", marko, vadas, "knows").setProperty("weight", 0.5f);
        graph.addEdge("class:Person", marko, josh, "knows").setProperty("weight", 1.0f);
        graph.addEdge("class:Person", marko, lop, "created").setProperty("weight", 0.4f);        graph.addEdge("class:Person", josh, ripple, "created")
                .setProperty("weight", 1.0f);
        graph.addEdge("class:Person", josh, lop, "created").setProperty("weight", 0.4f);        graph.addEdge("class:Person", peter, lop, "created").setProperty("weight", 0.2f);
    }
}

и Класс Person:

package launcher;import com.tinkerpop.frames.Adjacency;
import com.tinkerpop.frames.Property;public interface Person {    @Property("name")
    String getName();    @Property("name")
    void setName(String name);    @Property("age")
    int getAge();    @Property("age")
    void setAge(int age);    @Adjacency(label = "knows")
    Iterable<Person> getKnowsPeople();    @Adjacency(label = "knows")
    void addKnowsPerson(Person person);
}

Я создаю свое приложение с помощью maven и здесь зависят от проекта:

<dependencies>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-core</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-graphdb</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.orientechnologies</groupId>
        <artifactId>orientdb-object</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.tinkerpop.blueprints</groupId>
        <artifactId>blueprints-core</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>com.tinkerpop</groupId>
        <artifactId>frames</artifactId>
        <version>2.6.0</version>
    </dependency>
</dependencies>

Этот пример кода используется из исходный код tinkerpop. Как вы видите, у нас есть вершинный тип "Личность" и какие-то ребра, такие как "знает" и "создаются". Теперь я узнал, как создать вершину и ребро и как добавить к ним элемент. Но проблема в том, что я не знаю, как извлечь элемент из графика по краям. Я знаю, как получить данные по своим свойствам нравится возраст и т. Д., Но проблема в том, что я не понимаю, как извлекать данные по краям. например Как найти вершину, которая не "знает" кого-либо из приведенного выше примера с помощью Graph API (Tinkerpop Blueprints)?


1 ответ

Michela Bonizzi ответил: 11 мая 2018 в 03:42

Попробуйте следующее:

Iterable<Vertex> people=peter.getVertices(Direction.OUT, "knows");
Iterable<OVertex> OVertex().getVertices(ODiriection dir, String... name) (version 3.0)

Таким образом вы определяете начальную вершину, направление поиска и имя края. Это вернет список всех подключенных вершин, например, peter.

Надеюсь, что это поможет

С уважением

Venaho Yun ответил: 11 мая 2018 в 03:56
В этом примере вы ищете только известных людей "peter", но мне нужно, чтобы все Вершины не имели края "know.OUT", например.

Дополнительное видео по вопросу: Как получить вершины по краям с помощью Graph API (Tinkerpop Blueprints) в OrientDB?

Traversing Graphs with Gremlin (Artem Chebotko, Solutions Architect at DataStax)

Using Graph Functions in OrientDB

Connect and give sense to your big data with Apache TinkerPop and graph databases by DuyHai Doan