Neo4j 3.5发布,在索引方面大幅增强

栏目: 数据库 · 发布时间: 5年前

内容简介:Neo4j 3.5版本已正式发布,这也是Neo4j宣布企业版闭源以来发布的第一个版本。这个版本在性能、资源使用率以及安全方面均有增强,我们可以先快速浏览一下这个版本:

Neo4j 3.5版本已正式发布,这也是Neo4j宣布企业版闭源以来发布的第一个版本。

这个版本在性能、资源使用率以及安全方面均有增强,我们可以先快速浏览一下这个版本:

  • 全文索引

  • 基于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信息。查询结果如下所示:

Neo4j 3.5发布,在索引方面大幅增强

因为这个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


以上所述就是小编给大家介绍的《Neo4j 3.5发布,在索引方面大幅增强》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习系统设计

机器学习系统设计

[德] Willi Richert、Luis Pedro Coelho / 刘峰 / 人民邮电出版社 / 2014-7-1 / CNY 49.00

如今,机器学习正在互联网上下掀起热潮,而Python则是非常适合开发机器学习系统的一门优秀语言。作为动态语言,它支持快速探索和实验,并且针对Python的机器学习算法库的数量也与日俱增。本书最大的特色,就是结合实例分析教会读者如何通过机器学习解决实际问题。 本书将向读者展示如何从原始数据中发现模式,首先从Python与机器学习的关系讲起,再介绍一些库,然后就开始基于数据集进行比较正式的项目开......一起来看看 《机器学习系统设计》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具