新しいNeo4jデータベースを作成しています。ユーザーと呼ばれるタイプのノードがあり、ユーザーIdentifierおよび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
インデックスを作成して開始クエリで使用するにはどうすればよいですか?私はこれを達成するために設定ファイルと暗号を使いたいだけです。つまり、現時点では、Power Tool Consoleでのみプレイしています。
以下を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);
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)
インデックスは主に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