您的位置:首页 > 大数据 > 人工智能

Neo4j索引笔记之SchemaIndex和LegacyIndex

2016-06-06 22:22 337 查看
neo4j包含schema indexes 和 legacy indexes两种类型,两者理念不同且不可互换或兼容,实际应用中应明确检索需求后采用合适的索引。

schema index vs legacy index

参考neo4j index-confusion

* schema index和legacy index 都是基于lucene实现;

* 如果你正在使用Neo4j 2.0或者更高版本并且不需要支持2.0版本之前legacy index的代码,那么请只使用schema index同时避免legacy index;

* 如果你不得不使用Neo4j的早期版本,并且无法升级,无论如何你都只有一种索引可以选择(legacy index);

* 如果你需要全文检索的索引,不管是什么版本,都将使用legacy index。

schema index(schema based indexes)

Neo4j is a schema-optional graph database. You can use Neo4j without any schema. Optionally you can introduce it in order to gain performance or modeling benefits.

This allows a way of working where the schema does not get in your way until you are at a stage where you want to reap the benefits of having one.


* 在Neo4j 2.0版本之前,Legacy index被称作indexes。这个索引是在graph外部通过Lucene实现,允许“节点”和“关系”以键值对的形式被检索。从Neo4j 提供的REST接口来看,被称作
index
的变量通常是指Legacy indexes;

* Legacy index能够提供全文本检索的能力。这个功能并没有在schema index中被提供,这也是Neo4j 2.0* 版本保留legacy indexes的原因之一。

新建索引

create index on :Node(property),会对指定label property的所有node新建index ,index新建成功后,当graph更新时index会自动更新,index默认存储在根目录的/schema/index/lucene目录;

如:

# 新建索引
CREATE INDEX ON :AddressNode( preAddressNodeGUIDs)
# 删除索引
DROP INDEX ON :AddressNode(_id)


存储方式

schema index存储方式为复合索引(Compound Index),除了段信息文件,锁文件,以及删除的文件外,其他的一系列索引文件压缩一个后缀名为cfs的文件,即所有的索引文件会被存储成一个单例的Directory,

此方式有助于减少索引文件数量,减少同时打开的文件数量,从而获取更高的效率。比如说,查询频繁,而不经常更新的需求,就很适合这种索引格式。

legacy index

Neo4j Legacy Index配置参数

参数描述
typeexact, fulltextexact采用Lucene keyword analyzer是默认配置. fulltext采用white-space tokenizer in its analyzer.
to_lower_casetrue, falsetype=fulltext时生效,在新建索引和查询时会自动进行字母的大小写转换,默认为小写
analyzerAnalyzer类全名自定义Lucene Analyzer,注意:to_lower_case配置会默认将查询参数转换为小写.如果自定义analyzer索引写入的字母为大写,查询结果将会不匹配

新建索引

分exact和fulltext两类,两者可结合使用,可新建relationship索引,默认存储在根目录的index/lucene目录;

fulltext索引新建方式参考笔记Neo4j中实现自定义中文全文索引

* 注意:使用legacy index查询往往需要一个start node;

存储方式

legacy index采用非复合索引,更灵活,可以单独的访问某几个索引文件

Neo4j联合索引

参考:https://dzone.com/articles/indexing-neo4j-overview

Neo4j不支持联合索引,可采用拼接字段实现

Neo4j 3.0开始支持联合索引,但需要升级至JDK8

https://github.com/neo4j/neo4j/issues/6841
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene neo4j