25

我正在创建一个新的 Neo4j 数据库。我有一种名为 User 的节点,我想要一个关于 user IdentifierEmailAddress属性的索引。当数据库是新的时,如何设置索引?我注意到在 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

如何创建索引并在开始查询中使用它?我只想使用配置文件和密码来实现这一点。即目前我只玩电动工具控制台。

4

3 回答 3

52

将以下内容添加到 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

此信息来自本页底部的评论

更新

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

START nd =node(*) 
WHERE has(nd.Property_Name)
WITH nd
SET nd.Property_Name = nd.Property_Name
RETURN count(nd);
于 2012-10-14T00:05:49.130 回答
9

索引主要针对用于 where 条件的属性。在 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
于 2014-04-29T11:06:49.440 回答
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)
于 2014-02-23T11:59:33.963 回答