私は OrientDB の初心者です。私は Java 開発者なので、OrientDB へのコネクタとして Graph API を選択しました。
ここでは、非常に単純なコード例を作成しました。
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 ソース コードから使用されています。ご覧のとおり、ここには「人」の頂点タイプと、「知っている」や「作成された」などのある種のエッジがあります。これで、頂点とエッジを作成する方法と、それらに要素を追加する方法がわかりました。しかし、問題は、エッジに従ってグラフから要素を取得する方法がわからないことです。年齢などのプロパティでデータを取得する方法は知っていますが、問題は、エッジに従ってデータを取得する方法がわからないことです。たとえば、グラフ API (Tinkerpop Blueprints) によって上記の例から「誰も知らない」頂点を見つける方法は?