赞
踩
neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系。一个node(relationship)可以在某索引中存储多个属性对,一个属性对也可以对应到多个node(relationship)。
代码:
- 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
与oracle等关系型数据库不同的是,neo4j中索引的维护由用户自行管理(索引内容的增删改)。索引的维护必须在事务范围内。每个索引具有一个名称,neo4j根据名称来查找或者创建索引。
维护索引时,有一点需要特别注意:更新索引时,需要手工删除对应的更新项,然后在添加更新后的项; 如下所示:
- // 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" ) );
索引的查询可以使用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.
- }
- Index<Node> 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"));
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。