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

原文地址:https://www.cnblogs.com/jpfss/p/11429889.html

时间: 2024-10-10 10:50:34

Neo4j:Index索引的相关文章

关于index 索引

index : 索引:建立索引的目的是提高数据查询的速度. 1:建立索引 index eg:对birthday 字段经常进行查询操作,可以考虑在该字段上建立 index . create index t_stutdent_index on t_student(birthday); create index 索引名 on 表名(字段): 删除索引 drop index 索引名. 原文地址:https://www.cnblogs.com/2016-cxp/p/8654796.html

Index索引文件

1.IndexHeader头部,40字节,记录IndexFile的统计信息: begainTimestamp:该索引文件中包含消息的最小存储时间 endTimestamp:该索引文件中包含消息的最大存储时间 begainPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog文件偏移量) endPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog文件偏移量) hashslotCount:hashslot个数,并不是hash槽的个数,在这里意义不大 in

public animal this[int index]|索引器的使用

学习如何使用索引器,索引器的使用是public 类型 this[int index]{get{};set{}} ,访问通过类的实例(对象)加[i], 例如animal[i],就像访问数组一样,其实就是类的数组访问的使用书写. 使用详情请看msdn. 例子如下: class IndexerClass { private int[] arr = new int[100]; public int this[int index] // Indexer declaration { get { // Che

如何加快建 index 索引 的时间

朋友在500w的表上建索引,半个小时都没有结束.所以就讨论如何提速. 一.先来看一下创建索引要做哪些操作:1. 把index key的data 读到内存==>如果data 没在db_cache 中,这时候很容易有大量的db file scatter read wait 2. 对index key的data 作排序==>sort_area_size 或者pga_aggregate_target 不够大的情况下,需要做 disk sort, 会有大量的driect path read/write

mysql之index(索引)(转)

(转)MySQL索引的查看创建和删除 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有3个未索引的表t1.t2.t3,分别只包含列c1.c2.c3,每个表分别含有1000行数据组成,指为1-1000的数值,查找对应值相等行的查询如下所示. SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3 此查

ORA-01502 oracle数据库 index索引的两种形式

目前的项目中,我们在跑批次的时候,有个SP总是报错 "ORA-01502: index 'WBILL_102.PK_A_NOTWEB_ACT_PROVINCE_M' or partition of such index is in unusable state" ,解决办法就是重建索引,ALTER INDEX IN_AA REBUILD; 但是解决完之后,在跑批还是报这个错误,这就让我需要考虑,产生这个问题的原因是什么! 我的错误场景还原: 有个表 CUS_ASSET_MONTH,主键

利用js输出ul下li的index索引值

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>打印索引</title> </head> <style type="text/css"> li{background: pink;margin-bottom: 10px;height: 40px;} </style> <body>

Oracle中查询时候使index索引失效的限制条件

昨天,由于最近的项目需要进入到测试人员进行测试的阶段.因此,自己搭建好了测试环境---进行了测试.但是,奇怪的事情就发生了.以前在我自己本地开发的环境的时候却没有碰到这个问题. 由于在测试环境执行的查询的时候,不管怎么做,总是会查询失败,并且前台抛出"无法连接,请联系系统管理员"异常,开始,我就不断的跟踪这个异常, 第一:在前台找了好久  也设置了相应的response====timeout时间参数为60s.再去执行,还是查询失败.因此,否定了这个原因. 第二:我使用Debug模式去调

PLSQL_性能优化系列01_Oracle Index索引

2014-06-01 BaoXinjian 一.摘要 在PLSQL查询优化中,使用和接触最多的应该是索引Index这个概念,个人也觉得对Index选择和优化是程式优化过程中比较重要的概念,特别是刚开始接触PLSQL性能优化 索引的一些概念 一个索引可以由一个或多个列组成, 对列设置索引其实就是对列的内容按一定的方式进行排序,检索数据的时候,检索排过序的数据,检索到最后一个有效数据之后就跳出检索 这样就不必进行全表扫描了,同时可以应用很多算法提高检索效率 数据库多用二分法检索数据 索引的连接方式