【问题标题】:Neo4j: Step by Step to create an automatic indexNeo4j:逐步创建自动索引
【发布时间】:2012-10-04 08:49:26
【问题描述】:

我正在创建一个新的 Neo4j 数据库。我有一种名为 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

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

【问题讨论】:

  • 确保在下面看到 Boggle 的回答 - 索引在 2.0+ 中的工作方式要简单得多 - 正如您所说的那样,它是一个新数据库,因此希望迁移到最新的 neo4j 版本是一种选择...

标签: database indexing neo4j cypher database-indexes


【解决方案1】:

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

【讨论】:

【解决方案2】:

在 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)

【讨论】:

    【解决方案3】:

    索引主要基于用于 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多