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

    参考信息

    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>
  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/jpfss/p/11394011.html
Copyright © 2011-2022 走看看