我正在创建一个新的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中玩。
答案 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