neo 4 jにおけるインデックスの使用
neo 4 jはnodeとrelationshipの属性に対してインデックスを確立することができ、インデックスのnode(relationship)と属性はkey-valueに対して多対多の関係である.1つのnode(relationship)は、あるインデックスに複数の属性ペアを格納することができ、1つの属性ペアは複数のnode(relationship)に対応することができる.
コード:
neo 4 jでは、インデックスは2つに分けることができる:neo 4 j自体はrelationshipに関するインデックス実装である;Apache Luceneなどの独立したインデックスエンジンに基づくインデックスメカニズム.通常、インデックスとは2番目のケースを指します.インデックスのオブジェクトによって、インデックスをnodeベースのインデックスとrelationshipベースのインデックスの2つに分類できます.
Oracleなどのリレーショナル・データベースとは異なり、neo 4 jにおけるインデックスのメンテナンスはユーザーが自分で管理する(インデックス・コンテンツの削除).インデックスのメンテナンスはトランザクションの範囲内でなければなりません.各インデックスには名前があり、neo 4 jは名前に基づいてインデックスを検索または作成します.
インデックスのメンテナンスでは、インデックスを更新するときに、対応する更新項目を手動で削除し、更新後の項目を追加する必要があります.次のようになります.
古いアイテムを削除しない場合、fishburnを指す2つのkey-valueが同時に存在します.
インデックスのクエリーはGETメソッドを使用するか、QUERYメソッドを使用するかで、getに比べてqueryメソッドの機能がより強力です.getメソッドは正確なkey-valueマッチングを行う.QUERY
インデックスを作成する場合、apiでインデックスの構成オプションを設定できます.次のように、構成インデックスはfulltext検索をサポートします.
まとめ:neo 4 jはインデックスメカニズムを提供し、リレーショナル・データベースに比べてプログラマの介入が必要な内容が多く、そのため、柔軟性は比較的強いが、プログラマの作業量を増やすに違いない.
コード:
Node node1 = graphDb.createNode();
node1.setProperty("name","easypoint");
Node node2 = graphDb.createNode();
node2.setProperty("name","csdn");
nodeIndex.add(node1,"name",node1.getProperty("name"));
nodeIndex.add(node1,"name","haha");
nodeIndex.add(node2,"name",node2.getProperty("name"));
nodeIndex.add(node2,"name","haha");
for(Node node :nodeIndex.get("name","haha")){
System.out.println(node.getProperty("name"));
}
結果:easypoint
csdn
neo 4 jでは、インデックスは2つに分けることができる:neo 4 j自体はrelationshipに関するインデックス実装である;Apache Luceneなどの独立したインデックスエンジンに基づくインデックスメカニズム.通常、インデックスとは2番目のケースを指します.インデックスのオブジェクトによって、インデックスをnodeベースのインデックスとrelationshipベースのインデックスの2つに分類できます.
Oracleなどのリレーショナル・データベースとは異なり、neo 4 jにおけるインデックスのメンテナンスはユーザーが自分で管理する(インデックス・コンテンツの削除).インデックスのメンテナンスはトランザクションの範囲内でなければなりません.各インデックスには名前があり、neo 4 jは名前に基づいてインデックスを検索または作成します.
インデックスのメンテナンスでは、インデックスを更新するときに、対応する更新項目を手動で削除し、更新後の項目を追加する必要があります.次のようになります.
// create a node with a property
// so we have something to update later on
Node fishburn = graphDb.createNode();
fishburn.setProperty( "name", "Fishburn" );
// index it
actors.add( fishburn, "name", fishburn.getProperty( "name" ) );
// update the index entry
// when the property value changes
actors.remove( fishburn, "name", fishburn.getProperty( "name" ) );
fishburn.setProperty( "name", "Laurence Fishburn" );
actors.add( fishburn, "name", fishburn.getProperty( "name" ) );
古いアイテムを削除しない場合、fishburnを指す2つのkey-valueが同時に存在します.
インデックスのクエリーはGETメソッドを使用するか、QUERYメソッドを使用するかで、getに比べてqueryメソッドの機能がより強力です.getメソッドは正確なkey-valueマッチングを行う.QUERY
Relationship persephone = roles.get( "name", "Persephone" ).getSingle();
for ( Node movie : movies.query( "title:*Matrix* AND year:1999" ) )
{
// This will return "The Matrix" from 1999 only.
}
インデックスを作成する場合、apiでインデックスの構成オプションを設定できます.次のように、構成インデックスはfulltext検索をサポートします.
Index fulltextMovies = index.forNodes( "movies-fulltext",
stringMap(IndexManager.PROVIDER, "lucene", "type", "fulltext") );
Node node1 = graphDb.createNode();
node1.setProperty("name","easypoint and abb");
fulltextMovies.add( node1,"name",node1.getProperty("name"));
for(Node node :fulltextMovies.query( "name", "and" )){
System.out.println(node.getProperty("name"));
}
まとめ:neo 4 jはインデックスメカニズムを提供し、リレーショナル・データベースに比べてプログラマの介入が必要な内容が多く、そのため、柔軟性は比較的強いが、プログラマの作業量を増やすに違いない.