Ngôn ngữ truy vấn Cypher

Một phần của tài liệu Sử dụng cơ sở dữ liệu đồ thị trong hệ gợi ý (Trang 32 - 37)

5. Nội dung nghiên cứu

1.2.3. Ngôn ngữ truy vấn Cypher

1.2.3.1. Tổng quan về Cypher

Theo [4], Cypher là một ngôn ngữ khai báo truy vấn đồ thị cho phép truy vấn, cập nhật và quản trị đồ thị một cách rõ ràng và hiệu quả. Nó đƣợc thiết kế để phù hợp cho cả nhà phát triển và các chuy n gia. Cypher đƣợc thiết kế đơn giản nhƣng mạnh mẽ; Các truy vấn cơ sở dữ liệu phức tạp cao có thể đƣợc thể hiện dễ dàng, cho phép bạn tập trung vào vấn đề của mình, thay vì bị mất thời gian vào quyền truy cập cơ sở dữ liệu.

Về cấu trúc, Cypher mƣợn cấu trúc của nó từ SQL - các truy vấn đƣợc xây dựng bằng cách sử dụng các mệnh đề khác nhau. Các mệnh đề đƣợc liên kết với nhau và chúng cung cấp các tập kết quả trung gian giữa nhau.

1.2.3.2. Thực thi truy vấn Cypher

Có một số cách có thể thực hiện các truy vấn Cypher. Neo4j đi kèm với một số công cụ hỗ trợ thực thi Cypher và Cypher cũng có thể đƣợc thực thi từ mã Python, giống nhƣ SQL. Bảng 1.4 cho thấy các tùy chọn thực thi Cypher.

Bảng 1. 5. Công cụ và kỹ thuật đ thực hi n các truy vấn Cypher

Tool Description

Neo4j Shell Công cụ dòng lệnh

Neo4j Web Admin Console Giao diện dựa trên web

Python Theo chƣơng trình

REST Trên HTTP sử dụng giao diện REST

1.2.3.3. Các lệnh cơ bản trong Cypher

Đọc thêm tài liệu về các câu lệnh Cypher tại:

https://neo4j.com/docs/cypher-manual/current/clauses/

a. MATCH và RETURN

Ví dụ: Hiển thị User có id là ‗User 1‘

Mã lệnh Cypher:

MATCH (u:User {id:'User 1'}) RETURN u

b. CREATE với Cypher

Ví dụ: Tạo một node có nhãn (label) User với property {id: „User 944‟}

Mã lệnh Cypher:

CREATE (u: User {id: ‘User 944’}) RETURN u

c. UPDATE với Cypher

Mã lệnh Cypher:

MATCH (p: Person {name: ‚Jennifer‛}) SET p.birthday = date(‚1999-01-01‛)

Ví dụ 2: Jennifer làm việc ở công ty "Neo4j" từ năm 2018

Mã lệnh Cypher:

MATCH (:Person {name: ‚Jennifer‛})

-[rel:WORK_FOR]->(:Company {name: ‚Neo4j‛) SET rel.start_year = date({year:2018})

d. DELETE với Cypher

Ví dụ 1: Xóa mối quan hệ bạn bè giữa Jennifer và Mark

Mã lệnh Cypher:

MATCH (j: Person {name: ‚Jennifer‛})

-[friend: IS_FRIEND_WITH]->(m: Person {name: ‚Mark‛}) DELETE friend

Ví dụ 2: Xóa nút Person có property {name: "Mark"}

Mã lệnh Cypher:

MATCH (p: Person {name: ‚Mark‛) DELETE p

Ví dụ 3: Xóa đồng thời nút và mối quan hệ của nó

Mã lệnh Cypher:

MATCH (p: Person {name: ‚Mark‛}) DETACH DELETE p

e. REMOVE với Cypher

Xóa hoàn toàn thuộc tính khỏi nút và không lƣu trữ nó nữa.

Ví dụ: Xóa thuộc tính birthday của Jennifer

Mã lệnh Cypher:

REMOVE p.birthday

f. MERGE trong Cypher

MERGE thực hiện chọn lọc và kiểm tra dữ liệu có tồn tại trong CSDL hay không, trƣớc khi chèn vào CSDL.

Ví dụ 1: Chèn Person Mark vào CSDL bằng MERGE

Mã lệnh Cypher:

MERGE (mark: Person {name: ‚Mark‛}) RETURN mark

Nút mark đã tồn tại trong CSDL trƣớc đó, n n câu lệnh trên sẽ không tạo thêm nút mark mới mà chỉ trả về nút mark đã có.

MERGE trên 1 mối quan hệ: Sử dụng tƣơng tự nhƣ CREATE. Nếu mối quan hệ chƣa đƣợc thiết lập, MERGE sẽ thực hiện tạo mới toàn bộ (mặc dù nút đã tồn tại).

Ví dụ 2: Thực hiện tạo mối quan hệ bạn bè giữa Jennifer và Mark

Mã lệnh Cypher:

MATCH (j: Person {name: ‚Jennifer‛}) MATCH (m: Person {name: ‚Mark‛}) MERGE (j)-[r: IS_FRIEND_WITH]->(m) RETURN j, r, m

Sử dụng MATCH để thực hiện khớp dữ liệu trƣớc khi tạo mối quan hệ. Nếu chỉ sử dụng MERGE mà không khớp dữ liệu sẽ dẫn đến việc lệnh MERGE tạo lại các nút đã tạo nếu không tìm thấy mối quan hệ giữa các nút đó -> bị lặp dữ liệu.

g. Kết hợp MERGE, CREATE, MATCH và SET

đồng thời khởi tạo một số thuộc tính mới hoặc cập nhật lại các thuộc tính khác nếu nó chỉ đƣợc khớp, trong trƣờng hợp này, ta sử dụng ON CREATE hoặc ON MATCH với SET.

Mã lệnh Cypher:

MERGE (m: Person {name: ‚Mark‛})

-[r:IS_FRIEND_WITH]-(j: Person {name: ‚Jennifer‛}) ON CREATE SET r.since = date(‚2018-01-01‛)

ON MATCH SET r.update = date()

h. WHERE trong Cypher

Mã lệnh Cypher với WHERE:

MATCH (person: Person)

WHERE person.name = ‚Jennifer‛ RETURN person

• WHERE NOT: trả về thuộc tính không khớp với mẫu.

Mã lệnh Cypher:

MATCH (person: Person)

WHERE NOT person.name = ‚Jennifer‛ RETURN person

• WHERE EXISTS (property): kiểm tra xem thuộc tính có tồn tại trong nút hoặc một mối quan hệ có tồn tại trong mẫu.

Mã lệnh Cypher:

MATCH (varname: NodeLabel) WHERE exists(varname.property) RETURN varname

• WHERE ... IN: Kiểm tra xem giá trị thuộc tính có phải là giá trị trong danh sách đã cho.

Mã lệnh Cypher:

MATCH (varname: NodeLabel)

WHERE varname.property IN your_array RETURN varname

Một phần của tài liệu Sử dụng cơ sở dữ liệu đồ thị trong hệ gợi ý (Trang 32 - 37)

Tải bản đầy đủ (PDF)

(78 trang)