2012-10-13 39 views
23

Tôi đang tạo cơ sở dữ liệu Neo4j mới. Tôi có một loại nút được gọi là Người dùng và tôi muốn một chỉ mục về các thuộc tính của người dùng Mã định danhEmailAddress. Làm cách nào để thiết lập chỉ mục khi cơ sở dữ liệu mới? Tôi đã nhận thấy trong tập tin neo4j.properties có vẻ là hỗ trợ cho việc tạo các chỉ mục. Tuy nhiên khi tôi đặt những như vậyNeo4j: Từng bước để tạo chỉ mục tự động

# 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 

Và thêm một nút và làm một truy vấn để tìm một định danh mà tôi biết tồn tại

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

sau đó tôi nhận được một

MissingIndexException: Index `Identifier` does not exist 

thế nào Tôi tạo một chỉ mục và sử dụng nó trong một truy vấn bắt đầu? Tôi chỉ muốn sử dụng các tập tin cấu hình và cypher để đạt được điều này. tức là tại thời điểm hiện tại, tôi chỉ chơi trong Bảng điều khiển Công cụ Power.

+0

Hãy chắc chắn để xem câu trả lời Boggle của bên dưới - làm thế nào chỉ số công việc đơn giản hơn đáng kể trong 2.0+ - và khi bạn nói đó là cơ sở dữ liệu mới, vì vậy hy vọng chuyển sang phiên bản neo4j mới nhất là một tùy chọn ... –

Trả lời

51

Thêm dòng sau vào neo4j.properties nộp

# 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 

Tạo chỉ số tự động cho các nút

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

Kiểm tra nếu chúng tồn tại

neo4j-sh (0)$ index --indexes 

nên trở

Node indexes: 
node_auto_index 

Khi truy vấn sử dụng cú pháp sau đây để xác định chỉ số

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

Khi nút là tự động lập chỉ mục tên của chỉ số này node_auto_index

Thông tin này xuất phát từ một nhận xét ở cuối của this page

Cập nhật

Trong trường hợp bạn muốn ăn x dữ liệu hiện tại của bạn mà đã có trước chỉ mục tự động được bật (nơi PROPERTY_NAME là tên của chỉ số của bạn)

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

[cách khởi động neo4j-sh trên Windows] (http: // stackoverflow. com/a/19275558/1174169) – cod3monk3y

+2

Sử dụng http: // localhost: 7474/webadmin. Sau khi tải trang, chọn tab console. bạn có thể thực thi các lệnh shell ở đó. – MSRS

+1

Câu trả lời này thực sự là cũ và tôi không chắc chắn nếu điều này vẫn là cách tốt nhất để làm điều này. Một số làm rõ về điều này sẽ là tốt. –

8

Trong Neo4j 2.0, bạn nên sử dụng các nhãn và các khó khăn mới thay

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

Nếu email không phải là duy nhất cho mỗi người dùng, chỉ cần tạo chỉ mục đơn giản thay thế:

CREATE INDEX ON :User(EmailAddress) 
8

Chỉ mục chủ yếu được thực hiện trên tài sản được sử dụng cho điều kiện. Trong Neo4j 2.0, các chỉ mục dễ thực hiện ngay bây giờ.

Tạo chỉ số trên nhãn

CREATE INDEX ON :Person(name) 

Drop chỉ mục trên một nhãn

DROP INDEX ON :Person(name) 

Tạo chế độc đáo

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

Drop độc đáo hạn

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

Đối liệt kê tất cả các chỉ số và những hạn chế trong neo4j trình duyệt, sau lệnh rất hữu ích

Danh sách
:schema 

chỉ số và những hạn chế đối với nhãn cụ thể với:

:schema ls -l :YourLabel 
Các vấn đề liên quan