与传统关系型数据库一样,为了更快地遍历出需要的节点,索引是必不可少的。
显示地创建索引
还是使用上几章创建的数据为例,假定现在给USERS节点添加email属性,并且期望电子邮件地址是唯一的,然后以用户的邮箱作为索引。在命令行输入index --indexes
可以列出索引项,该索引为legacy index,如果可能请只使用下面的schema index同时避免legacy index。
|
|
通过邮件地址索引查找用户
用户的邮箱已经被索引,现在我们就通过索引来查找USERS节点
手动创建索引的修改
上面我们以email为值手动为用户创建了索引,如果此时用户需要修改email,原索引就失效了。同时Neo4j并不会自动地修改索引,而且Index<Node>接口也没有提供修改索引的方法,所以解决的方法就是将原索引先删除,然后再添加新的索引。
自动索引
Neo4j有两种自动维护索引的方法–模式索引和自动索引。
模式索引
该索引为schema index,下面演示单个节点对应单个索引的使用
每个节点可以附加多个标签,每个标签可以有一个索引,如果节点具有多个标签,Neo4j将会确保相关的索引按要求更新
需要注意的是graphDB.schema().indexFor(label).on(property).create()创建的只是索引,不带唯一约束功能。可以通过graphDatabaseService.schema().constraintFor(label).assertPropertyIsUnique(property).create()创建带唯一约束的索引,此时如果创建已经存在的节点会在transaction提交时报异常。
在neo4j-shell中可以看出创建索引的详细信息:
自动索引
自动索引的开启需要修改配置文件,或者声明newEmbeddedDatabase的时候给定特殊的参数。对于数据库有点认知的同学都会知道,索引是门学问,并不是越多越好,该内容暂时就不做展开了。