neo4jを使ってみる その2

ノードとノードをつないでグラフを作ってみます。
ノード間のリレーションはRelationshipオブジェクトで表現されます。試しに社畜と会社の関係を表してみましょう。

// 関連のタイプを表現する列挙型
public enum MyRelationshipTypes implements RelationshipType {
  WORKS_AT
}

...

// 1つめのノードを作成
Node emp= graphDb.createNode();
emp.setProperty("name", "Naoki Takezoe");

// 2つめのノードを作成
Node company = graphDb.createNode();
company.setProperty("name", "NTT DATA INTELLILINK");

// 1つめのノードから2つめのノードへの関連を定義
Relationship relationship = emp.createRelationshipTo(
  company, MyRelationshipTypes.WORKS_AT);

前回のサンプルでは全ノードをループで出力しましたが、neo4jにはリレーションをたどってノードをトラバースする機能があるのでこれを試してみます。

// 基点となるノードを取得
Node company = ...

// EMPLOYSの関連をたどるトラバーサ
Traverser traverser = company.traverse(
  Order.DEPTH_FIRST,
  StopEvaluator.END_OF_GRAPH,
  ReturnableEvaluator.ALL_BUT_START_NODE,
  MyRelationshipTypes.EMPLOYS,
  Direction.OUTGOING);

for(Node emp: traverser){
  ...
}

単純に関連をたどるだけでなく、ReturnableEvaluatorを拡張することでフィルタリングみたいなことが可能です。あと、拡張機能になりますが、IndexServiceというものを使うことでプロパティでの検索を行うこともできます。インデックスと検索する値を指定すると一致するノードを取得することができます。
とりあえず基本機能はこんなところでしょうか。
あと、jo4neoというオブジェクト/グラフマッパーや、Neoclipseなんていうneo4jのDBの中身を参照・操作するためのEclipseプラグインなんかもあるようです。