neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系。一个node(relationship)可以在某索引中存储多个属性对,一个属性对也可以对应到多个node(relationship)。

代码:

  1. Node node1 = graphDb.createNode();
  2. node1.setProperty("name","easypoint");
  3. Node node2 = graphDb.createNode();
  4. node2.setProperty("name","csdn");
  5. nodeIndex.add(node1,"name",node1.getProperty("name"));
  6. nodeIndex.add(node1,"name","haha");
  7. nodeIndex.add(node2,"name",node2.getProperty("name"));
  8. nodeIndex.add(node2,"name","haha");
  9. for(Node node :nodeIndex.get("name","haha")){
  10. System.out.println(node.getProperty("name"));
  11. }

结果:

  1. easypoint
  2. csdn

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

与oracle等关系型数据库不同的是,neo4j中索引的维护由用户自行管理(索引内容的增删改)。索引的维护必须在事务范围内。每个索引具有一个名称,neo4j根据名称来查找或者创建索引。

维护索引时,有一点需要特别注意:更新索引时,需要手工删除对应的更新项,然后在添加更新后的项; 如下所示:

  1. // create a node with a property
  2. // so we have something to update later on
  3. Node fishburn = graphDb.createNode();
  4. fishburn.setProperty( "name", "Fishburn" );
  5. // index it
  6. actors.add( fishburn, "name", fishburn.getProperty( "name" ) );
  7. // update the index entry
  8. // when the property value changes
  9. actors.remove( fishburn, "name", fishburn.getProperty( "name" ) );
  10. fishburn.setProperty( "name", "Laurence Fishburn" );
  11. actors.add( fishburn, "name", fishburn.getProperty( "name" ) );

如果,不删除旧项,则会同时存在指向fishburn的两个key-value。

索引的查询可以使用GET方法,也可以使用QUERY方法,相对与get,query方法功能更强大一些。get方法进行精确的key-value匹配;QUERY

  1. Relationship persephone = roles.get( "name", "Persephone" ).getSingle();
  1. for ( Node movie : movies.query( "title:*Matrix* AND year:1999" ) )
  2. {
  3. // This will return "The Matrix" from 1999 only.
  4. }

创建索引时,通过api可以制定索引的配置选项。如下所示,配置索引支持fulltext检索

  1. Index<Node> fulltextMovies = index.forNodes( "movies-fulltext",
  2. stringMap(IndexManager.PROVIDER, "lucene", "type", "fulltext") );
  1. Node node1 = graphDb.createNode();
  2. node1.setProperty("name","easypoint and abb");
  3. fulltextMovies.add( node1,"name",node1.getProperty("name"));
  4. for(Node node :fulltextMovies.query( "name", "and" )){
  5. System.out.println(node.getProperty("name"));
  6. }

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

neo4j中索引的使用的更多相关文章

  1. Neo4j中實現自定義中文全文索引

    資料庫檢索效率時,一般首要優化途徑是從索引入手,然後根據需求再考慮更復雜的負載均衡.讀寫分離和分散式水平/垂直分庫/表等手段:索引通過資訊冗餘來提高檢索效率,其以空間換時間並會降低資料寫入的效率,因此 ...

  2. Neo4j中实现自定义中文全文索引

    数据库检索效率时,一般首要优化途径是从索引入手,然后根据需求再考虑更复杂的负载均衡.读写分离和分布式水平/垂直分库/表等手段:索引通过信息冗余来提高检索效率,其以空间换时间并会降低数据写入的效率:因此 ...

  3. 一、neo4j中文文档-入门指南

    目录 neo4j中文文档-入门指南 Neo4j v4.4 neo4j **Cypher ** 开始使用 Neo4j 1. 安装 Neo4j 2. 文档 图数据库概念 1. 示例图 2.节点 3. 节点 ...

  4. Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

    使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循 ...

  5. 理解SQL Server中索引的概念

    T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他   简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...

  6. MySQL中索引的基础知识

    本文是关于MySQL中索引的基础知识.主要讲了索引的意义与原理.创建与删除的操作.并未涉及到索引的数据结构.高性能策略等. 一.概述 1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能. 数 ...

  7. MySQL 中索引的限制

    MySQL 中索引的限制在使用索引的同时,我们还应该了解在MySQL 中索引存在的限制,以便在索引应用中尽可能的避开限制所带来的问题.下面列出了目前MySQL 中索引使用相关的限制.1. MyISAM ...

  8. 使用jQuery+huandlebars循环中索引(@index)使用技巧(访问父级索引)

    兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...

  9. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

随机推荐

  1. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  2. libuv在mingw下编译

    libuv是一个基于事件的异步IO库,来自node.js项目. libuv提供了Makefile.mingw,供MingW编译,由其中的规则我们可以得到一下编译步骤: cd libuv/src gcc ...

  3. 优先队列 逆向思维 Gym 101128C

    题目链接:http://codeforces.com/gym/101128/my 具体题目大意可以看这个人的:http://blog.csdn.net/v5zsq/article/details/61 ...

  4. GridControl GridView 修改表格中的标题居中

    Grid Designer>Views>Appearance>HeaderPanel>TextOptions>HAIignment{Center} 依次打开并找到HAIL ...

  5. ASP.Net中表单POST到其他页面的方法

    在ASP中,我们通常把表单提交到另外一个页面(接受数据页面).但是在ASP.NET中,服务端表单通常都是提交到本页面的,如果我设置 form1.action="test.aspx" ...

  6. 【CODEVS】1922 骑士共存问题

    [算法]二分图最大匹配(最大流) [题解]按(i+j)奇偶性染色后,发现棋子跳到的地方刚好异色. 然后就是二分图了,对于每个奇点向可以跳到的地方连边,偶点不需连(可逆). 所以题目要求转换为求二分图上 ...

  7. 【BZOJ2882】【字符串的最小表示】工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  8. js设置html区域隐藏和显示

    if(message != "指派") { document.getElementById("appoint").style.display="non ...

  9. Java 注解全面解析

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  10. 爬虫--Scrapy之Downloader Middleware

    下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和respons ...