2014-07-21 21 views
7

Có cách nào để tạo mô hình phân cấp kiểu trong Neo4j không? Ví dụ: nếu tôi muốn xây dựng một hệ thống phân cấp lớp xe hơi, tôi có thể có loại cơ sở là "Xe hơi" và sau đó có các lớp con mở rộng, như "SportCar", v.v.Làm cách nào để làm việc với các cấu trúc phân cấp loại trong Neo4j?

Tôi muốn có thể để tạo ra các thể hiện của "SportCar", nhưng chạy một truy vấn để có được tất cả "Xe". Điều này có thể không? Nếu vậy kỹ thuật là gì?

Tôi nghĩ rằng những gì tôi đang cố gắng làm là tạo ra một "phân cấp nhãn" - nhưng tôi chỉ không nghĩ rằng đó là hỗ trợ trong neo4j.

+0

Dường như là bản sao của http://stackoverflow.com/questions/21402271/do-having-multiple-labels-for-a-node-in-neo4j-make-any-sense – cybersam

+0

Một điều tôi đã đã học được sau khi đọc thêm về neo4j là không có hệ thống "loại" thực sự. Điều gần nhất họ có là những gì họ gọi là "nhãn" mà về cơ bản chỉ là "thẻ" bạn có thể đặt trên một nút. Do đó, bạn phải xây dựng các truy vấn theo cách cụ thể hơn, vì không có hỗ trợ ngoài hộp cho "loại", v.v. –

+0

AgensGraph (mở rộng PostgreSQL với chức năng đồ thị DB) có phân cấp nhãn: http : //www.agensgraph.com/agensgraph-docs/agensgraph_data_model.html#labels –

Trả lời

10

Paul,

Trước tiên, tôi muốn khuyên bạn nên đọc "Graph Cơ sở dữ liệu", một O'Reilly e-book miễn phí tại this link.

Khi đâm nhanh vào câu trả lời, có rất nhiều cách để làm việc này, và lựa chọn tốt nhất phụ thuộc vào vấn đề bạn đang cố giải quyết. Một cách sẽ được để xây dựng một "Car" nút, sau đó liên hệ "SportCar" của bạn nút đến nút "Car" với một mối quan hệ gõ như

CREATE (m:Car) 
MATCH (m:CAR) WITH m CREATE (n:SportCar)-[:IS_A]->(m) 

và tạo các loại xe ô tô, cũng liên hệ chúng với các xe nút.

Sau đó bạn có thể tìm thấy tất cả các xe qua

MATCH (m:Car)<-[:IS_A]-(n) RETURN n 

Bạn cũng có thể chỉ cần đặt xe và SportCar (và LuxoCar, vv) nhãn trên mỗi nút. Và đó chỉ là hai trong số nhiều cách tiếp cận.

Grace và hòa bình,

Jim

+3

Ya Tôi biết bạn có thể áp dụng mối quan hệ "IsA" trong khi bạn tạo các nút, nhưng điều đó không cho phép bạn thực hiện "MATCH (c: Car) RETURN c "và lấy lại tất cả Ô tô, bao gồm cả ô tô là các loại xe phụ. Tôi không nghĩ neo4j hỗ trợ kế thừa trong tìm kiếm. Để rõ ràng, OrientDB không hỗ trợ điều này - mà tôi đoán chỉ là sự khác biệt chính giữa hai nền tảng. Ngoài ra, cách tiếp cận nhãn không quy mô và sẽ là một mớ hỗn độn để quản lý khi hệ thống phân cấp thay đổi - hãy tưởng tượng phải quay lại và cập nhật tất cả các nhãn trước đó, v.v. –

2

Vì vậy, các closets điều tôi có thể đưa ra là ví dụ này.

Bước 1: Tạo phân cấp loại của loại xe.

create (c:CarType{Code:"Car"}) 
create (sc:CarType{Code:"SportCar"}) 
create (sc)-[:SubCarOf]->(c) 

Bước 2: Tạo thể hiện "SportCar" và ghi (thông qua thuộc tính mối quan hệ) là "Loại ô tô".

merge (sc:CarType{Code:"SportCar"}) 
create (i:SportCar) 
create (i)-[:CarType]->(sc) 

Bước 3: Viết truy vấn tìm tất cả "CarType" lấy từ "Car", sau đó tìm các trường hợp này.

match (c)-[:CarType]->(ct:CarType{Code:"Car"}) 
return c as Car 
union 
match (sct)-[:SubCarOf*]->(ct:CarType{Code:"Car"}), 
(c)-[:CarType]->(sct) 
return c as Car 
1

Có ít nhất hai cách để làm điều đó:

1) Sử dụng nhiều lables cho từng đối tượng

CREATE(BMW325d:Car:PassengerCar:DieselCar) 
CREATE(Porsche911:Car:SportsCar:...) 

2) Tạo một Ontology

Cách thứ hai để mô hình hóa một hệ thống phân cấp lớp là sử dụng ontology. Mặc dù mô hình dữ liệu Neo4j như một biểu đồ đặc tính và các bản thể luận phù hợp hơn cho RDF Triple Stores có nhiều cách để sử dụng chúng.

Bạn có thể tạo bản thể luận bằng cách sử dụng Protégé (Mã nguồn mở). Sau đó, bạn lưu Ontology trong một tệp .owl và tải nó lên Neo4j bằng cách sử dụng Plugin này. Sau khi bạn xác nhận các nút của mình trong Neo4j đến Đoạn được tạo trong Protégé. Mô tả chi tiết hơn được mô tả here.

hơn về chủ đề này ...

Đối với mục đích của bạn một RDF Ba Store là một lựa chọn thú vị, escpecially nếu bạn muốn thêm ngữ nghĩa dữ liệu của bạn muốn sử dụng suy luận và thừa kế. Tôi khuyên bạn nên xem xét kỹ hơn về RDF Triple Stores, cũng là đồ thị - nhưng chúng lưu trữ dữ liệu theo ba (chủ đề - vị ngữ - đối tượng) thay vì các nút và quan hệ. Top Braid Composer là một công cụ "dễ học" để bắt đầu với chúng.

Mặc dù, tôi hy vọng rằng khoảng cách giữa các biểu đồ bất động sản và các cửa hàng ba RDF sẽ sớm trở nên nhỏ hơn tại thời điểm đó là sự cân bằng. Vì vậy, bạn nên cẩn thận đặt yêu cầu của bạn trên cơ sở dữ liệu trước khi chọn một trong số chúng.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan