<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生态来看,索引能力支持力度参差不齐,但索引方面的增强,都是未来关键的发力方向。

参考信息

Neo4j Document: Indexes

Neo4j 3.5 Release Overview

Graph Modeling Tips, Full-Text Search Preview, Building a Graph App

原文地址:http://www.nosqlnotes.com/technotes/graphdb/neo4j-index/

</div>

Neo4j 3.5发布,在索引方面大幅增强的更多相关文章

  1. SQL Server 2012大幅增强T-SQL

    SQL Server 2012对T-SQL进行了大幅增强,其中包括支持ANSI FIRST_VALUE和LAST_VALUE函数,支持使用FETCH与OFFSET进行声明式数据分页,以及支持.NET中 ...

  2. Neo4j 查询已经创建的索引与约束

    在Neo4j 2.0之后为cypher语法增加了一些类似于DDL的语法,能够自己创建索引,约束等等. 有如下的方法可以查询到当前图数据库的索引数量: neo4j-shell 使用:index –ind ...

  3. Neo4j学习笔记(2)——数据索引

    和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...

  4. smartjs 0.2发布 - 新增oop模块&AOP增强

    SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...

  5. SQL Server 2016 —— 聚集列存储索引的功能增强

    作者 Jonathan Allen,译者         邵思华         发布于     2015年6月14日   聚集列存储索引(CC Index)是SQL Server 2014中两大最引 ...

  6. Chrome发布73 beta版:增强Linux用户体验

    Google开发者周五推动Chrome 73进入他们的测试频道,因为他们准备在3月12日左右推出这款网页浏览器更新,以便稳定推出.除非另有说明,否则下面描述的更改适用于Android,Chrome O ...

  7. Angular2正式版发布,Wijmo抢先支持

    Angular2正式版发布 9月15日,Angular 2 的最终版正式发布了.作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围 ...

  8. .Net Core应用程序发布时不同方式的差别

    .Net Core的文档更新的真是快..每次看的时候都觉得之前是不是梦游看的...每次发布应用程序的时候都要翻看下文档..至少rid是死活记不住.还是留个RID的索引吧..还有发布的索引 ,这样就好复 ...

  9. MySQL索引知识点及面试常问题

    索引的功能 索引可以大幅增加数据库的查询的性能,在实际业务场景中,或多或少都会使用到. 但是索引是有如下 2 个代价的: 需要额外的磁盘空间来保存索引 对于插入.更新.删除等操作由于更新索引会增加额外 ...

随机推荐

  1. 命令行启动tomcat

    windows下进入CMD启动.window+r打开命令窗口具体步骤:1:在命令行中输入Tomcat安装的磁盘:E:2:进入Tomcat的主安装目录:cd Tomcat3:进入bin文件夹:cd bi ...

  2. spring中的web上下文,spring上下文,springmvc上下文区别(超详细)

    web上下文(Servlet context),spring上下文(WebApplication Context),springmvc上下文(mlWebApplicationCont)之间区别. 上下 ...

  3. tensorflow 训练最后预测结果为一个定值,可能的原因

    训练一个分类网络,没想到预测结果为一个定值. 找了很久发现,是因为tensor的维度的原因.  注意:我说的是我的label数据的维度. 我的输入是: y_= tf.placeholder(tf.in ...

  4. swiper 窗口宽度变化,页面宽度高度变化 导致自动滑动 解决方案

    又又又又是swiper问题 背景: pc端项目,rem布局,swiper作为步骤条(上一步,下一步)的功能. 发现在屏幕拖动,宽高的变化,窗口大小的变化 会引起swiper自动滑动(到下一步). 在下 ...

  5. 41-Ubuntu-用户管理-06-su切换用户

    su 切换用户 序号 命令 作用 说明 01 su - 用户名 切换用户,并且切换家目录 '-'可以切换到用户家目录,否则保持位置不变 02 exit 退出当前登录账户 返回上一级用户 图:su与ex ...

  6. 36-Ubuntu-用户管理-01-新建用户useradd

    创建用户/设置密码/删除用户/确认用户信息 序号 命令 作用 说明 01 sudo useradd -m -g 组名 新建用户名 添加新用户 -m 自动建立用户家目录 -g 指定用户所在的组,否则会建 ...

  7. JQuery日记6.7 Javascript异步模型(二)

    异步模型看起来非常美,但事实上它也是有天生缺陷的.看以下代码 try { setTimeout( function(){ throw new Error( '你抓不到我的!' ); }, 100); ...

  8. style优先级

    不同级别 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. 作为style属性写在元素内的样式 id选择器 类选择器 标签选择器 通配符选择器 浏览器自定义或继承       ...

  9. [Err] 1701 - Cannot truncate a table referenced in a foreign key constraint

    1.SET FOREIGN_KEY_CHECKS=0; 2.DELETE FROM ACT_RE_DEPLOYMENT where 1=1; 或者 truncate table ACT_RE_DEPL ...

  10. 2019-4-15-VisualStudio-如何在-NuGet-包里面同时包含-DEBUG-和-RELEASE-的库

    title author date CreateTime categories VisualStudio 如何在 NuGet 包里面同时包含 DEBUG 和 RELEASE 的库 lindexi 20 ...