加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

neo4j中索引的使用

发布时间:2020-12-13 13:49:09 所属栏目:百科 来源:网络整理
导读:neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系。一个node(relationship)可以在某索引中存储多个属性对,一个属性对也可以对应到多个node(relationship)。 代码: Node node1 = graphDb.crea

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,"haha");
            nodeIndex.add(node2,node2.getProperty("name"));
            nodeIndex.add(node2,"haha");

            for(Node node :nodeIndex.get("name","haha")){
                 System.out.println(node.getProperty("name"));
            }
结果:
easypoint
csdn

在neo4j中,索引可以分为两类:neo4j本身既是关于relationship的索引实现;基于独立索引引擎,如Apache Lucene的索引机制。通常情况下,我们所说的索引指第二种情况。按照索引的对象可以将索引分为两类:基于node的索引和基于relationship的索引。

与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,fishburn.getProperty( "name" ) );
// update the index entry
// when the property value changes
actors.remove( fishburn,fishburn.getProperty( "name" ) );
fishburn.setProperty( "name","Laurence Fishburn" );
actors.add( fishburn,fishburn.getProperty( "name" ) );

如果,不删除旧项,则会同时存在指向fishburn的两个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<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,node1.getProperty("name"));

            for(Node node :fulltextMovies.query( "name","and" )){
                System.out.println(node.getProperty("name"));
            }
总结:neo4j提供了索引机制,与关系数据库相比,需要编程人员干预的内容较多,也正是因此,其灵活性是比较强的,但无疑增加了程序人员的工作量。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读