Neo4j:逐步创建自动索引

时间:2012-10-13 22:41:44

标签: database indexing neo4j cypher database-indexes

我正在创建一个新的Neo4j数据库。我有一种名为User的节点,我想要一个关于用户标识符 EmailAddress 属性的索引。如何在数据库是新的时设置索引?我注意到在neo4j.properties文件中看起来支持创建索引。但是当我将它们设置为

# Autoindexing

# 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=EmailAddress,Identifier

添加一个节点并执行查询以查找我知道存在的标识符

START n=node:Identifier(Identifier = "USER0")
RETURN n;

然后我得到了

MissingIndexException: Index `Identifier` does not exist

如何创建索引并在启动查询中使用它?我只想使用配置文件和cypher来实现这一点。即目前我只在Power Tool Console中玩。

3 个答案:

答案 0 :(得分:51)

将以下内容添加到neo4j.properties文件

# Autoindexing

# 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=EmailAddress,Identifier

为节点创建自动索引

neo4j-sh (0)$ index --create node_auto_index -t Node

检查它们是否存在

neo4j-sh (0)$ index --indexes

应该返回

Node indexes:
node_auto_index

查询时,请使用以下语法指定索引

start a = node:node_auto_index(Identifier="USER0")
return a;

当节点自动编入索引时,索引的名称为node_auto_index

此信息来自this page

底部的评论

<强>更新

如果您想要在打开自动索引之前索引当前数据(其中Property_Name是索引的名称)

START nd =node(*) 
WHERE has(nd.Property_Name)
WITH nd
SET nd.Property_Name = nd.Property_Name
RETURN count(nd);

答案 1 :(得分:8)

在Neo4j 2.0中,您应该使用标签和新约束

    CREATE CONSTRAINT ON (n:User) ASSERT n.Identifier IS UNIQUE
    CREATE CONSTRAINT ON (n:User) ASSERT n.EmailAddress IS UNIQUE

如果电子邮件不是每个用户唯一,则只需创建一个普通索引:

    CREATE INDEX ON :User(EmailAddress)

答案 2 :(得分:8)

索引主要针对用于条件的属性。在Neo4j 2.0中,索引很容易制作。

在标签上创建索引

CREATE INDEX ON :Person(name)

删除标签上的索引

DROP INDEX ON :Person(name)

创建唯一性约束

CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE

删除唯一性约束

DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE

为了列出neo4j-browser中的所有索引和约束,以下命令很有用

:schema

列出特定标签的索引和约束:

:schema ls -l :YourLabel