Neo4j 3.5发布,在索引方面大幅增强
<p class="md-end-block md-focus" contenteditable="true"><span class="md-expand">Neo4j 3.5版本已正式发布,这也是Neo4j宣布企业版闭源以来发布的第一个版本。</span></p>
这个版本在性能、资源使用率以及安全方面均有增强,我们可以先快速浏览一下这个版本:
全文索引
基于Index的快速排序
Go语言Driver
内置索引完善,性能有5X提升
将Transaction State移到Off heap区
接下来的内容,将重点探讨Neo4j的索引能力,Neo4j索引包含两大部分:
Neo4j的内置索引能力
基于Lucene的全文索引
Neo4j内置索引
基于单个Property构建的索引
创建单个Property索引的语法举例如下(本文范畴内的例子均来自Neo4j Document,见本文末尾的引用信息):
CREATE INDEX ON :Person(firstname)
如果一个Node拥有Label(“Person”),且同时拥有Property(“firstname”),那么这个Node将被添加到这个Index中。
基于多个Property构建的组合索引
创建两个Property组合索引的语法举例如下:
CREATE INDEX ON :Person(age, country)
如果一个Node拥有Label(“Person”),且同时拥有两个Property(“age”)与Property(“country”),那么这个Node将被添加到这个Index中。
例如:
NodeA: (a:Person {firstname: ‘Bill’, age: 34, country: ‘USA’})
NodeB: (b:Person {firstname: ‘Sue’, age: 39})
这个索引索引将包含NodeA但不包含NodeB,因NodeB缺乏Property(“country”)。
在查询中发挥的作用
假设系统中已经基于Person(firstname)创建了一个索引,对于如下查询:
MATCH (person:Person)
WHERE person.firstname = 'Andy'
RETURN person
基于这个索引,可以快速命中结果记录。
同样,如下两种查询也是可以基于这个索引进行的:
MATCH (person:Person)
WHERE person.firstname > 'B'
RETURN person
MATCH (person:Person)
WHERE person.firstname IN ['Andy', 'John']
RETURN person
对于组合索引,如果所关联的所有的Property都在查询条件中以Equal条件出现,则能起到最显著的加速作用。
全文索引
无论是Node还是Relationships的Property,都可能包含复杂的描述信息,基于这些信息的全文检索,则是一个关键需求。
Neo4j的全文索引能力是基于Apache Lucene实现:
既可以索引Nodes,也可以索引Relationships。
索引的创建,删除与更新均为事务性操作。
定制了Analyzer。
在Cypher中支持Lucene查询语法。
支持返回查询结果的Scoring信息。
索引可基于Node/Relationship的变化而自动更新。
可以基于Cypher Procedures进行访问。
可配置的数据一致性模型。
提供了数据与索引的一致性检查工具,并支持索引重建
下面我们给出一个创建索引,写数据以及查询的样例:
索引创建
CALL db.index.fulltext.createNodeIndex("titlesAndDescriptions",["Movie", "Book"],["title", "description"])
为Label名称为”Movie“以及”Book“的Nodes的Property(“title”)及Property(“description”)创建全文索引,索引名称为”titlesAndDescriptions“。
写数据
假设写入如下一条记录:
CREATE (m:Movie { title: "The Matrix" })
RETURN m.title
这条记录包含Label(“Movie”)并且包含了Property(“title”),因此,会被增加到索引”titlesAndDescriptions”中。
查询
CALL db.index.fulltext.queryNodes("titlesAndDescriptions", "matrix") YIELD node, score
RETURN node.title, node.description, score
这个查询中指定了返回score信息。查询结果如下所示:
因为这个Node的title信息中包含了关键词”matrix”,所以与查询条件相匹配。
总结
本文讲解了Neo4j的内置索引以及基于Lucene的全文索引能力,放眼整个数据库的角度,这些索引的实现并无亮点之处,但它们却很好的丰富了Neo4j所支持的查询类型。从整个NoSQL生态来看,索引能力支持力度参差不齐,但索引方面的增强,都是未来关键的发力方向。
参考信息
Graph Modeling Tips, Full-Text Search Preview, Building a Graph App
原文地址:http://www.nosqlnotes.com/technotes/graphdb/neo4j-index/
</div>
Neo4j 3.5发布,在索引方面大幅增强的更多相关文章
- SQL Server 2012大幅增强T-SQL
SQL Server 2012对T-SQL进行了大幅增强,其中包括支持ANSI FIRST_VALUE和LAST_VALUE函数,支持使用FETCH与OFFSET进行声明式数据分页,以及支持.NET中 ...
- Neo4j 查询已经创建的索引与约束
在Neo4j 2.0之后为cypher语法增加了一些类似于DDL的语法,能够自己创建索引,约束等等. 有如下的方法可以查询到当前图数据库的索引数量: neo4j-shell 使用:index –ind ...
- Neo4j学习笔记(2)——数据索引
和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...
- smartjs 0.2发布 - 新增oop模块&AOP增强
SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...
- SQL Server 2016 —— 聚集列存储索引的功能增强
作者 Jonathan Allen,译者 邵思华 发布于 2015年6月14日 聚集列存储索引(CC Index)是SQL Server 2014中两大最引 ...
- Chrome发布73 beta版:增强Linux用户体验
Google开发者周五推动Chrome 73进入他们的测试频道,因为他们准备在3月12日左右推出这款网页浏览器更新,以便稳定推出.除非另有说明,否则下面描述的更改适用于Android,Chrome O ...
- Angular2正式版发布,Wijmo抢先支持
Angular2正式版发布 9月15日,Angular 2 的最终版正式发布了.作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围 ...
- .Net Core应用程序发布时不同方式的差别
.Net Core的文档更新的真是快..每次看的时候都觉得之前是不是梦游看的...每次发布应用程序的时候都要翻看下文档..至少rid是死活记不住.还是留个RID的索引吧..还有发布的索引 ,这样就好复 ...
- MySQL索引知识点及面试常问题
索引的功能 索引可以大幅增加数据库的查询的性能,在实际业务场景中,或多或少都会使用到. 但是索引是有如下 2 个代价的: 需要额外的磁盘空间来保存索引 对于插入.更新.删除等操作由于更新索引会增加额外 ...
随机推荐
- CSS:CSS 创建
ylbtech-CSS:CSS 创建 1.返回顶部 1. CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表(Extern ...
- Echart使用js进行封装成函数
Echart使用js进行封装成函数 主要是对 json 串的封装,使用 js 进行对 json 的解析.之间用的最多是循环取出数组中的值,如果拿去使用可直接修改 json 就好. 上一篇把二维的封装好 ...
- [zz]C#多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系 ...
- ICPC Asia Nanning 2017 L. Twice Equation (规律 高精度运算)
题目链接:Twice Equation 比赛链接:ICPC Asia Nanning 2017 Description For given \(L\), find the smallest \(n\) ...
- ajax图片上传
使用ajaxfileupload.js插件 html代码: <p> <label>ajax上传</label> <input type="file& ...
- Vim多窗口编辑
在Linux中使用vim编辑多个窗口 方式: 1. vim -o file1 file2 打开的两个文件上下窗口分布 比如当前目录有makefil ...
- el-scrollbar 如何去掉横线滚动条?
1. el-scrollbar style="height:100%" 2. 不要在scoped私有变量添加 .el-scrollbar__wrap{ overflow-x: hi ...
- 对TextVIew中特定字符串设定onTouchEvent方法
上面是Iphone备忘录的图,笔者之前接到一个需求是实现点击文本框里的数字,弹出一个类似上图的按钮,显示出复制,要求是这个按钮的位置必须是根据你点击的位置进行定位(为什么这么说,是因为我们不可能把按钮 ...
- 前端自动化构建工具——gulp环境搭建教程
gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ...
- SQL登录报错
在安装完SQL后,发现报出了error40和53的错误,作为小白的我也是一脸懵逼,明明一切都是按照默认加下一步安装的,为什么到了连接数据库的时候就出现了问题呢? 后来经过调查,发现需要将sql配置管理 ...