Neo4j:Index索引
Indexing in Neo4j: An Overview
by Stefan Armbruster · Jan. 06, 14 · Java Zone
Neo4j是一个图数据库,在做图的检索时,用index确定图检索graph travesal的起始节点start point。过去的数次版本更迭,index索引的实现方式发生了多次变化。这个Overview的主要目的是解释一下各种index方式的由来和概念,以使neo4j的新用户不产生概念上的混淆。
No Indexes in the Beginning
一开始,neo4j是没有Index索引的。在做graph的遍历的时候,需要从Reference Node开始。只有通过给Node绑定一些标志来获得Reference Node。Reference Node或者”Node 0”被当作一个全局的变量使用。直到neo4j 1.9.x 版本,GraphDatabaseService类有了getReferenceNode()方法,来获取Reference Node。当然,getReferenceNode()方法在neo4j 2.0版本以后已经被废弃了。
Manual Indexes
Manual Index(手动索引,先这么翻译吧~)在neo4j 1.0版本之前已经开始筹备了,那时候neo4j还没有Cypher和server模式,只能使用java API操作Graph。Manual Index是通过java API添加的。
建manual Index的方法:
IndexManager index = graphDb.index();
Index<Node> nodeIndex = index.forNodes( "nodes" );
Node node = graphDb.createNode();
nodeIndex.add( node, "name", "Thomas Anderson" );
如果有manual index,可以用cypher查询:
START n=node:Person(name='abc') RETURN n
manual index的缺点:
1、建manual索引比较麻烦。
2、程序员会滥用index,index应该只用于检索,而不应该存储多余的信息。
manual index的优点:
可以自己控制建索引是使用什么分词器(Analyzer)
参考: http://docs.neo4j.org/chunked/stable/indexing-create-advanced.html.
35.10. Configuration and fulltext indexes
At the time of creation extra configuration can be specified to control the behavior of the index and which backend to use. For example to create a Lucene fulltext index:
IndexManager index = graphDb.index();
Index<Node> fulltextMovies = index.forNodes( "movies-fulltext", MapUtil.stringMap( IndexManager.PROVIDER, "lucene", "type", "fulltext"));
fulltextMovies.add( theMatrix, "title", "The Matrix" );
fulltextMovies.add( theMatrixReloaded, "title", "The Matrix Reloaded" );
// search in the fulltext index
Node found = fulltextMovies.query( "title", "reloAdEd" ).getSingle();
Here’s an example of how to create an exact index which is case-insensitive:
Index<Node> index = graphDb.index().forNodes( "exact-case-insensitive", stringMap( "type", "exact", "to_lower_case", "true" ) );
Node node = graphDb.createNode();
index.add( node, "name", "Thomas Anderson" );
assertContains( index.query( "name", "\"Thomas Anderson\"" ), node );
assertContains( index.query( "name", "\"thoMas ANDerson\"" ), node );
Automatic Indexes
Neo4j 1.4引入了自动索引(automatic index),使用自动建索引,在config/neo4j.properties中配置。
参考:http://www.cnblogs.com/nyzhai/p/4515102.html
# Enable auto-indexing for nodes, default is false.
node_auto_indexing=true
# The node property keys to be auto-indexed, if enabled.
node_keys_indexable=name,ki
# Enable auto-indexing for relationships, default is false.
relationship_auto_indexing=true
# The relationship property keys to be auto-indexed, if enabled.
relationship_keys_indexable=name,ki
cypher使用自动索引
START n=node:node_auto_index(name='abc') RETURN n
Schema Indexes
cypher建schema Index:
CREATE INDEX ON :Person(name);
使用schema Index:
MATCH (p:Person {name: 'Stefan'}) RETURN p
cypher查询时,如果有schema Index会使用索引;如果没有,会逐条扫描。schema Index索引是透明的。
Reference:
https://dzone.com/articles/indexing-neo4j-overview
原文地址:https://blog.csdn.net/u011697278/article/details/52462420
Neo4j:Index索引的更多相关文章
- neo4j中索引的使用
neo4j可以对node和relationship中的属性建立索引,索引中的node(relationship)和属性对key-value为多对多的关系.一个node(relationship)可以在 ...
- nexus私服update repair index索引失败解决方案(转)
转载地址:http://blog.csdn.net/first_sight/article/details/51559086 问题描述: 搭建Maven的Nexus私服仓库,一般安装完Nexus后,默 ...
- 加NONCLUSTERED INDEX索引,在ON了之后还要INCLUDE
之前加了索引,但效果不大 SET STATISTICS TIME ON --执行时间 SET STATISTICS IO ON --IO读取 DBCC DROPCLEANBUFFERS --清除缓冲区 ...
- py-day1-6 python 5个灰魔法 【len,index索引,for循环,切片】
# 索引,下标,获取字符串中的某一个字符. test = 'MuMingJun' v = test[3] print(v) i # 切片 test = 'MuMingJun' v = test[0:- ...
- index索引的一些简单理解
index索引(普通索引,允许出现相同的索引内容) 1.索引 索引是在数据量和访问量较大的时候,而出现的一种优化数据库的手段 索引可以提高查询(select)的效率,但相应的,它的 INSERT 与 ...
- 根据日志来源的不同生成不同的index索引
使用filebeat收集系统日志,不同应用的日志,然后把这些日志传输给Logstash,再然后交由elasticsearch处理,那么如何区分不同的日志来源呢? filebeat.yml配置文件中不启 ...
- 微信小程序获取index索引值的方法
功能:点击某一项,底部出现粉色边框 首先需要通过 bindtap 为每一个item项绑定一个点击事件,其次需要添加自定义属性 data-* = {{index}} ,以便在函数中获取到被点击item项 ...
- 【mq读书笔记】Index索引文件
1.IndexHeader头部,40字节,记录IndexFile的统计信息: begainTimestamp:该索引文件中包含消息的最小存储时间 endTimestamp:该索引文件中包含消息的最大存 ...
- MySQL查询优化之 index 索引的分类和使用
索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...
随机推荐
- @RequestParam 引发的编译问题
在使用SpringMVC绑定基本类型(如String,Integer等)参数时,应通过@RequestParam注解指定具体的参数名称,否则,当源代码在非debug模式下编译后,运行时会引发Handl ...
- MVC,MVP 和 MVVM 的图示(转载)
MVC,MVP 和 MVVM 的图示 作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常 ...
- 树莓派4B更换国内源
更换清华源:https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/ 注意树莓派4B的Respbian是基于Debian 10 Bluster 不要选错. ...
- Hibernate4教程二:基本配置(3)
被映射的类必须定义对应数据库表主键字段.大多数类有一个JavaBeans风格的属性, 为每一个实例包含唯一的标识.<id> 元素定义了该属性到数据库表主键字段的映射. java代码: &l ...
- join(long)方法和sleep(long)方法的比较
join(long)方法的源代码 public final synchronized void join(long millis) throws InterruptedException { long ...
- Android 中MediaPlayer播放音频
1.播放/res/raw/目录下的音频资源 public class MainActivity extends Activity { MediaPlayer mediaPlayer; int posi ...
- # Python第十节 传参
Python第十节 传参 一. 变量和变量名 首先说明变量名和变量的一点差异 例如: var = [1, 2, 3] `var = "Google" 调用变量var的时候, 既可以 ...
- shell数组变量
- Largest Submatrix 3
Largest Submatrix 3 给出一个\(n\times m\)的网格图,第i行第j列上的格子有数字\(a[i][j]\),显然,你可以从中找到一个子矩阵,保证子矩阵中的数字互不相同,求子矩 ...
- MyBatis 通过包含的jdbcType类型
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED TINYINT REAL V ...