neo4j中索引的使用

标签: neo4j 索引 | 发表时间:2013-10-27 08:38 | 作者:joeadai
出处:http://blog.csdn.net

    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

    在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, "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的两个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,"name",node1.getProperty("name"));

            for(Node node :fulltextMovies.query( "name", "and" )){
                System.out.println(node.getProperty("name"));
            }

总结:neo4j提供了索引机制,与关系数据库相比,需要编程人员干预的内容较多,也正是因此,其灵活性是比较强的,但无疑增加了程序人员的工作量。


作者:joeadai 发表于2013-10-27 0:38:29 原文链接
阅读:184 评论:0 查看评论

相关 [neo4j 索引] 推荐:

neo4j中索引的使用

- - CSDN博客数据库推荐文章
    neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系. 一个node(relationship)可以在某索引中存储多个属性对,一个属性对也可以对应到多个node(relationship).     在neo4j中,索引可以分为两类:neo4j本身既是关于relationship的索引实现;基于独立索引引擎,如Apache Lucene的索引机制.

PostgreSQL、Neo4J进入云端领域

- - InfoQ cn
PostgreSQL和Neo4J,分别为关系型数据库和图形数据库,这两者最近都做出了进军云领域的举措. OpenStack也表示即将提供对PPCDB的支持,并会被CloudBees和 HP Cloud Services所采用. 还有一家供应商也对此感兴趣,他就是Engine Yard. PPCDB提供的Web界面,可用于安装和管理云中Postgres数据库的单个或集群实例.

Neo4j 推出基于 Python 的嵌入式图数据存储

- wang - python.cn(jobs, news)
Neo4j很早就在说,会推出一个嵌入在Python中的图数据库模块,让Python可以通过图数据库的API操作本地文件以存储图结构的数据(类似于很多支持SQLite的类库). 而今天Neo4j终于在官方博客上兑现了其承诺,并为自己的多次跳票表示抱歉. 目前最新版本在CPython2.7.2  Windows和Linux下都经过测试,在Python2.6版本下也可以正常工作.

NEO的图形数据库Neo4j获的1060万美元巨额融资

- imx - 36氪
图形数据库属于专业非主流数据库,但非SQL型数据库正逐步得到主流的认可,Neo Technology的开源数据库Neo4j获得1060万美元的融资就是最新的佐证. 这笔资金由Fidelity Growth Partners为首的风投公司提供,这个项目也是这家风投公司的第一笔投资,此外参与融资的风投公司还包括种子期投资人Sunstone Capital和Conor Venture Partners.

ElasticSearch 索引 VS MySQL 索引

- - crossoverJie's Blog
这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的. 这甚至比在我本地使用 MySQL 通过主键的查询速度还快. 这类问题网上很多答案,大概意思呢如下:. Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的索引数据,相对于.

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

MongoDB 索引

- - 博客园_首页
索引是用来加快查询的,数据库索引与数据的索引类似,有了索引就不需要翻遍整本书,数据库可以直接在索引中查找,. 使得查询速度很快,在索引中找到条目后,就可以直接跳转到目标文档的位置.. 要掌握如何为查询配置最佳索引会有些难度.. MongoDB索引几乎和关系型数据库的索引一样.绝大数优化关系型数据库索引的技巧同样适用于MongoDB..

倒排索引

- - ITeye博客
倒排索引是文档检索系统中最常见的数据结构,被广泛的应用于搜索引擎. 它是一种根据内容查找文档的方式. 由于不是根据文档来找内容,而是根据进行了相反的操作,因此叫做倒排索引. 倒排索引的一个简单结构如下图所示:. 最常见的是使用词频作为权重,即单词在一个文档中出现的次数. 因此,当搜索条件为“MapReduce”“is”“simple”的时候,对应的集合为{(0.txt,1),(1.txt,1),(2.txt,2)}且{(0.txt,1),(1.txt,2)}且{(0.txt,1),(1.txt,1)}={0.txt,1.txt}.

索引原理

- - ITeye博客
索引是存储引擎用于快速找到记录的一种数据结构. 也就会说索引也是一种数据结构,也占用磁盘空间. 索引是对查询优化最有效的手段,可以将查询提升几个数量级,相当牛掰啊. 1)索引大大减少了服务器需要扫描的数据量. 2)索引可以帮助服务器避免排序和临时表. 3)索引可以将随机IO变为顺序IO. 数据库索引可以想象成一本书的目录,如果想在一本书中找到某个主题,那么先到书的目录中找到这个主题,然后根据目录提供的页码,找到要找的主题.

倒排索引

- - CSDN博客推荐文章
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射. 它是文档检索系统中最常用的数据结构. 有两种不同的反向索引形式:. 一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表.