1. Trang chủ
  2. » Luận Văn - Báo Cáo

Trực quan hóa mạng trích dẫn các bài báo khoa học: luận văn thạc sĩ

60 68 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 60
Dung lượng 1,75 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mạng trích dẫn của các bài báo khoa học là các đồ thị rất lớn, nên cơ sở dữ liệu đồ thị neo4j với khả năng lưu trữ và truy vấn đồ thị sẽ được sử dụng để lưu trữ mạng trích dẫn này.. Neo4

Trang 2

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Người hướng dẫn khoa học: PGS.TS ĐỖ PHÚC

Đồng Nai, năm 2017

Trang 3

LỜI CẢM ƠN

Những kiến thức căn bản trong luận văn này là kết quả của hoạt động tự nghiên cứu trong quá trình công tác và hai năm học Cao học Công nghệ thông tin (2015 - 2017) tại Trường Đại học Lạc Hồng Dưới sự giảng dạy, đào tạo và dìu dắt trực tiếp của các thầy cô trong trường

Trước tiên, tôi xin bày tỏ sự kính trọng và lòng biết ơn chân thành, lời cảm ơn

sâu sắc nhất đối với thầy PGS.TS Đỗ Phúc, người đã trực tiếp hướng dẫn, định

hướng cho tôi giải quyết các vấn đề trong luận văn

Tôi xin bày tỏ lời cảm ơn chân thành tới quí thầy cô trong Khoa Công nghệ thông tin, Khoa sau đại học Trường Đại học Lạc Hồng, đã tạo điều kiện thuận lợi cho tôi trong thời gian học tập tại trường

Tôi xin cảm ơn đến Ban Lãnh đạo, các anh chị đồng nghiệp ở Trường Đại Học FPT, người thân, bạn bè và các bạn đồng môn lớp cao học, đã ủng hộ và giúp đỡ tôi trong quá trình làm luận văn tốt nghiệp

Xin trân trọng cảm ơn!

Đồng Nai, ngày 20 tháng 10 năm 2017

Học viên

Đoàn Tấn Phát

Trang 4

Tôi cam đoan rằng Luận văn Thạc sĩ “TRỰC QUAN HÓA MẠNG TRÍCH

DẪN CÁC BÀI BÁO KHOA HỌC” là công trình nghiên cứu độc lập, do chính tôi

hoàn thành Các nội dung nghiên cứu, kết quả trong luận văn này là trung thực và chưa được công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá đều được tôi thu thập từ công việc thực tế phát sinh tại đơn vị, các tài liệu mà tôi tham khảo đều có nguồn gốc trích dẫn rõ ràng

Tôi xin chịu hoàn toàn trách nhiệm về lời cam đoan trên

Đồng Nai, ngày 20 tháng 10 năm 2017

Học viên

ĐOÀN TẤN PHÁT

Trang 5

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI NGHIÊN CỨU 1

1.1Giới thiệu về đề tài 1

1.2Mục tiêu của đề tài 2

1.3Đối tượng và phạm vi nghiên cứu 3

1.3.1Đối tượng nghiên cứu 3

1.3.2Phạm vi nghiên cứu 3

1.4Phương pháp nghiên cứu 3

1.4.1Nội dung thực hiện 3

1.4.2Phương pháp thực hiện 3

1.5Ý nghĩa của đề tài 4

CHƯƠNG 2: CÁC KIẾN THỨC LIÊN QUAN 5

2.1 Cơ sở dữ liệu đồ thị Neo4j 5

2.1.1Cơ sở dữ liệu đồ thị 5

2.1.1.1Tổ chức quan hệ đồ thị 6

2.1.1.2Gán nhãn các Node 6

2.1.1.3Truy vấn đồ thị bằng cách duyệt 6

2.1.1.4Lập chỉ mục cho các Node hoặc Relationship 7

2.1.1.5Neo4j là một cơ sở dữ liệu đồ thị 7

2.1.2Cơ sở dữ liệu Neo4j 9

2.1.2.1Nodes 9

2.1.2.2Relationships 9

2.1.2.3Properties 11

2.1.2.4Nhãn 12

2.1.2.5Đường dẫn 13

2.2Ngôn ngữ truy vấn Cypher 15

2.2.1Tổng quan về Cypher 15

2.2.2 Tham số 17

2.2.3Giao dịch (transaction) 18

2.2.4Cú pháp 18

2.2.4.1Toán tử 18

2.2.4.2Biểu thức 18

2.2.5Mệnh đề 19

Trang 6

2.2.5.3Mệnh đề LIMIT 20

2.2.5.4Mệnh đề SKIP 20

2.2.5.5Mệnh đề WHERE 21

2.3Lý thuyết mạng trích dẫn 21

2.3.1Đặc điểm mạng trích dẫn 22

2.3.2Một số khái niệm trong mạng trích dẫn 22

2.3.2.1CitedSet 22

2.3.2.2 CitingSet 23

2.3.2.3 Full Graph 25

2.3.3Lợi ích của mạng trích dẫn: 22

2.4GraphStream 27

2.4.1Tổng quan về GraphStream 27

2.4.2Sử dụng GraphStream 28

2.4.2.1Cài đặt 28

2.4.2.2Sử dụng graphStream 28

CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG 31

3.1Phân tích yêu cầu ứng dụng 31

3.2Thiết kế ứng dụng 32

3.2.1Chuẩn hóa cơ sở dữ liệu 32

3.2.2Tạo cơ sở dữ liệu đồ thị Neo4j 35

3.2.3Tìm kiếm mạng trích dẫn 36

3.2.4Trực quan 37

CHƯƠNG 4: HIỆN THỰC HỆ THỐNG VÀ THỬ NGHIỆM 39

4.1Yêu cầu thực nghiệm 39

4.2Chạy chương trình 40

4.2.1Thao tác với dữ liệu 41

4.2.2Trực quan đồ thị 44

CHƯƠNG 5: Kết luận 50

5.1Kết luận 50

5.2Những thiếu sót của luận văn 50

5.3Hướng phát triển 50

Trang 7

Hình 1.1 Mạng trích dẫn 2

Hình 2.1: Đồ thị nhiều Node và Relationship 5

Hình 2.2: Truy vấn đồ thị bằng cách duyệt 6

Hình 2.3: Lập chỉ mục cho các Node hoặc Relationship 7

Hình 2.4: Cơ sở dữ liệu đồ thị Neo4j 8

Hình 2.5: Các Node 9

Hình 2.6: Một Node có một thuộc tính 9

Hình 2.7: Relationships 10

Hình 2.8: Quan hệ giữa hai Node 10

Hình 2.9: Quan hệ vào/ra một Node 10

Hình 2.10: Quan hệ loop 11

Hình 2.11: Các kiểu của Relationship 11

Hình 2.12: Properties 12

Hình 2.13: Nhãn 13

Hình 2.14: Paths 14

Hình 2.15: Path có chiều dài là 0 14

Hình 2.16: Path có chiều dài là 1 14

Hình 2.17: Đồ thị có nhiều quan hệ liên kết với nhau 16

Hinh 2.18: Đồ thị đơn giản 19

Hình 2.19: Trích dẫn luôn luôn chỉ ngược với thời gian 22

Hình 2.20: Kết quả của CitedSet 23

Hình 2.21: Kết quả của CitingSet 24

Hình 2.22: Kết quả của Full Graph 25

Hình 2.23: Trích dẫn luôn luôn chỉ ngược với thời gian 26

Hình 2.24: Tác giả chính của lĩnh vực 27

Hình 2.25: Xu hướng của mạng trích dẫn 27

Hình 3.1: Mô tả tổng quan hoạt động của ứng dụng 31

Hình 3.2: Bảng dữ liệu trên file csv 34

Hình 4.1 Hướng dẫn mở chương trình trực quan 40

Hình 4.2: Giao diện ứng dụng 41

Hình 4.3: Giao diện thao tác với file text 42

Trang 8

Hình 4.6: Giao diện chọn file csv để chuyển sang neo4j 43

Hình 4.7: Giao diện nơi lưu file database neo4j 44

Hình 4.8: Kết quả trực quan của Cited set 45

Hình 4.9: kết quả dạng text của Cited set 46

Hình 4.10: Kết quả trực quan của Citing set 46

Hình 4.11 Kết quả dạng text của Citingset 47

Hình 4.12 Kết quả trực quan của full graph 48

Hình 4.13 Kết quả dạng text của full graph 48

Hình 4.14 Kết quả trực quan mối quan hệ giữa hai bài báo 49

Trang 9

Bảng 2.1: kết quả trả về tất cả các node của đồ thị 20 Bảng 4.1: Các thông số cấu hình phần cứng và hệ điều hành 39 Bảng 4.2: Các thông số cấu hình phần mềm 40

Trang 10

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI NGHIÊN CỨU

1.1 Giới thiệu về đề tài

Hiện nay, với sự phát triển vượt bậc của mạng Internet, việc tìm kiếm tài liệu trở nên dễ dàng hơn Tuy nhiên mỗi khi làm nghiên cứu, nhà nghiên cứu cần đọc tài liệu rất nhiều và luôn muốn biết, trong phần mà họ nghiên cứu có những bài báo nào liên quan với nhau và được trích dẫn ở đâu Nhưng việc truy xuất nguồn gốc và tìm kiếm

để xác định mối liên hệ giữa các bài báo khoa học rất khó khăn

Với số lượng bài báo khoa học mỗi năm càng nhiều, dữ liệu càng lúc càng lớn dần theo thời gian Điều này gây ra nhiều khó khăn trong việc lưu trữ cũng như truy xuất mỗi khi cần

Mạng trích dẫn của các bài báo khoa học là các đồ thị rất lớn, nên cơ sở dữ liệu đồ thị neo4j với khả năng lưu trữ và truy vấn đồ thị sẽ được sử dụng để lưu trữ mạng trích dẫn này

Cơ sở dữ liệu đồ thị Neo4j là phần mềm quản trị cơ sở dữ liệu đồ thị mã nguồn mở, viết bằng Java, và được phát hành vào năm 2010 Neo4j là một cơ sở dữ liệu đồ thị và lưu trữ dữ liệu đồ thị.[5]

Luận văn này nhằm giải quyết việc lưu trữ dữ liệu đồ thị và biểu diễn cách truy xuất các kết nối dữ liệu lớn một cách sinh động dễ hình dung

đồ thị trích dẫn hoặc mạng trích dẫn.[7]

Trang 11

Hình 1.1 Mạng trích dẫn Hình 1.1 hiển thị như một mạng trích dẫn, ban đầu được công bố trong một bài báo thuộc lĩnh vực thuốc gây mê(Cawkell, 1971) Mạng trích dẫn minh họa các kết nối tham khảo giữa 19 bài báo đã được công bố trên các chủ đề giữa năm 1954 đến 1970 Trong (Ray Ostman et al.,2003) và (Ian Robinson et al., 2016) tác giả đã giới thiệu cơ

sở dữ liệu đồ thị Neo4j và hệ thống quản lý dữ liệu để tạo cơ sở dữ liệu ban đầu của một mạng trích dẫn Thông qua việc sử dụng cở sở dữ liệu đồ thị, thông tin trích dẫn

và các kể nối có thể được thừa hưởng và phân tích trích dẫn Đề tài kết hợp khả năng CSDL với mạng trích dẫn CSDL đồ thị có khả năng lưu trữ và tìm kiếm dữ liệu phức tạp về các bài báo, tạp chí, tác giả

1.2 Mục tiêu của đề tài

Phân tích các bài báo khoa học và tạo mạng trích dẫn các bài báo khoa học

Lưu trữ mạng trích dẫn vào cơ sở dữ liệu đồ thị Neo4j

Nghiên cứu đồ thị Neo4j để lưu mạng trích dẫn

Trực quan hóa đồ thị mạng trích dẫn:

o Miền ảnh hưởng một bài báo

o Mối liên hệ giữa 2 bài báo

o Nơi thông tin về bài báo

Trang 12

1.3 Đối tượng và phạm vi nghiên cứu

1.3.1 Đối tượng nghiên cứu

Khai thác và lưu trữ các bài báo khoa học trên citeseerx

1.3.2 Phạm vi nghiên cứu

CSDL Neo4j để lưu trữ dữ liệu các bài báo khoa học

Tạo mạng trích dẫn các bài báo khoa học với khoảng 10.000 bài báo

1.4 Phương pháp nghiên cứu

1.4.1 Nội dung thực hiện

- Tạo một mạng trích dẫn các bài báo khoa học

- Lưu mạng trích dẫn vào cơ sở dữ liệu đồ thị Neo4j

- Xây dựng chương trình trực quan mạng trích dẫn với truy vấn theo tầm ảnh hưởng, mối liên hệ giữa 2 bài báo

1.4.2 Phương pháp thực hiện

Tạo mạng trích dẫn các bài báo khoa học: Tìm hiểu và thử nghiệm với các công cụ trực quan hóa đồ thị sigma.js, vivagraph.js, gephi, D3.js, Keylines, Graphviz, GraphStream

Dùng cypher để lưu mạng trích dẫn, truy vấn cơ sở dữ liệu đồ thị

- Các dữ liệu trong CSDL đồ thị là các siêu dữ liệu (meta data), bao gồm dữ liệu trích dẫn Các CSDL được kết xuất như một mạng trích dẫn giữa các bài báo Luận văn kết hợp khả năng CSDL đồ thị với phân tích trích dẫn Neo4j cung cấp một phương tiện để lưu trữ và phân tích mạng trích dẫn Mỗi bài báo được tạo như sau: id: mã số của bài báo, Author: tác giả bài báo, Journal: tạp chí, Các quan hệ tác giả, xuất bản, trích dẫn Có 3 loại nodes trong CSDL đồ thị là authors, journals, and article Mục tiêu là:

o Phân tích trích dẫn cho các bài báo riêng biệt

o Phân tích tầm ảnh hưởng của bài báo

Truy Vấn & Cypher: Ngôn ngữ truy vấn Cypher để tạo và truy vấn dữ liệu trong Neo4j [2] CYPHER là khả năng truy vấn tương tự SQL của CSDL dữ liệu quan hệ Tuy nhiên, trong CSDL đồ thị, CYPHER có khả năng truy vấn đồ thị rất nhanh chóng thông qua phép duyệt và tìm đường đi trên đồ thị

Trang 13

Phép duyệt có thể đo lường:

- Khoảng cách giữa các nút

- Sự liên thông của các node mạng

- Đường đi ngắn nhất giữa hai node

Dùng java để viết chương trình trực quan hóa mạng trích dẫn

- Nút được biểu diễn bằng hình tròn

- Đường nối giữa các nút gọi là cạnh

- Tìm độ phủ của nút Độ phủ là những nút nào có liên kết gần nhất theo theo yêu cầu của người dùng

- Tìm mối liên hệ giữa hai nút theo cấp liên hệ

1.5 Ý nghĩa của đề tài

Bằng việc sử dụng đồ thị Neo4j để lưu trữ khối lượng lớn dữ liệu mạng trích dẫn, đồng thời việc thể hiện mạng trích dẫn bằng đồ thị trực quan sinh động sẽ giúp cho người nghiên cứu dễ dàng tìm kiếm và xác định được mối quan hệ giữa các bài báo khoa học Từ đó rút ngắn thời gian và đem lại hiệu quả cho quá trình tìm kiếm của nhà nghiên cứu

Trang 14

CHƯƠNG 2: CÁC KIẾN THỨC LIÊN QUAN

2.1 Cơ sở dữ liệu đồ thị Neo4j

2.1.1 Cơ sở dữ liệu đồ thị

Cơ sở dữ liệu đồ thị lưu trữ dữ liệu dưới dạng đồ thị, một dạng cấu trúc dữ liệu, có khả năng thể hiện bất kỳ loại dữ liệu nào theo một cách dễ tiếp cận nhất Chúng ta hãy khảo sát một số đồ thị, sử dụng chúng để hiểu thêm về khái niệm đồ thị Chúng ta

sẽ “đọc” một đồ thị bằng cách lần theo từng mũi tên đường đi của đồ thi.[1]

Một đồ thị chứa nhiều Node và Relationship

Đồ thị đơn giản nhất là đồ thị chỉ có duy nhất một Node, các thông tin lưu trữ trong Node gọi là Properties Một Node có thể bắt đầu với một Properties và phát triển lên hàng triệu Properties Tại một số thời điểm nó phân tán dữ liệu vào nhiều Node và những Node đó được tổ chức với những quan hệ rõ ràng Hình 2.1 thể hiện các thành phần và cách tổ chức lưu trữ đồ thị

Hình 2.1: Đồ thị nhiều Node và Relationship

Trang 15

2.1.1.1 Tổ chức quan hệ đồ thị

Tổ chức quan hệ giữa các Node theo những cấu trúc tùy tiện, cho phép một đồ thị tương tự như một danh sách, một cây, một bản đồ hoặc một thực thể kết hợp, … hay bất kỳ một thứ gì có thể được kết hợp phức tạp hơn, đa dạng về cấu trúc kết nối bên trong

2.1.1.2 Gán nhãn các Node

Nhãn là một phương tiện để gom nhóm các Node trong đồ thị Chúng có thể được sử dụng để hạn chế những truy vấn đến những tập con của đồ thị, cũng như cho phép kiềm hãm mô hình tùy chọn và các quy tắc lập chỉ mục

2.1.1.3 Truy vấn đồ thị bằng cách duyệt

Duyệt đồ thị là đi từ Node bắt đầu đến những Node liên quan (Relationship) theo một thuật toán nào đó, để cuối cùng tìm ra được câu trả lời cho câu hỏi giống như “loại nhạc nào mà bạn tôi thích nhưng tôi thì không thích” hoặc “nếu nguồn cung cấp điện này giảm thì những dịch vụ web bị ảnh hưởng?”[2] Hình 2.2 biểu diễn cách thức tìm kiếm node bằng cách duyệt đồ thị

Hình 2.2: Truy vấn đồ thị bằng cách duyệt

Trang 16

2.1.1.4 Lập chỉ mục cho các Node hoặc Relationship

Thông thường, khi ta muốn tìm một Node cụ thể nào đó hoặc một Relationship, duyệt

đồ thị là một cách có thể áp dụng nhưng không khả thi Thay vì duyệt qua toàn bộ đồ thị, sử dụng chỉ mục để thực hiện việc tìm kiếm sẽ nhanh chóng hơn Hình 2.3 thể hiện cách các chỉ mục liên kết các node và các quan hệ

Hình 2.3: Lập chỉ mục cho các Node hoặc Relationship

2.1.1.5 Neo4j là một cơ sở dữ liệu đồ thị

Neo4j là một cơ sở dữ liệu đồ thị mã nguồn mở Neo4j được thiết kế và xây dựng trên nền tảng Java để trở thành một cơ sở dữ liệu đáng tin cậy, tối ưu hóa cho các cấu trúc

đồ thị thay vì các dạng bảng[2] Hình 2.4 thể hiện đầy đủ chức năng lưu trữ và cách thức tìm kiếm của một cơ sở dữ liệu đồ thị Neo4j Cách thức làm việc của Neo4j

Trang 17

Hình 2.4: Cơ sở dữ liệu đồ thị Neo4j [2]

Cơ sở dữ liệu đồ thị lưu trữ như một dữ liệu tài liệu

Hệ thống lưu trữ phân cấp của cơ sở dữ liệu tài liệu là rất tốt Đồ thị dữ liệu có thể được thể hiện một cách dễ dàng giống như một cây Trong CSDL đồ thị Neo4j, những mối quan hệ có thể dễ dàng biểu diễn qua các cạnh của đồ thị

Trang 18

2.1.2 Cơ sở dữ liệu Neo4j

2.1.2.1 Nodes

Những thành phần cơ bản để hình thành một đồ thị là các Node và các Relationship Trong Neo4j, cả các Node và Relationship đều chứa thuộc tính

Các Node thường được dùng để đại diện cho các thực thể

Ngoài những thuộc tính và những quan hệ, các Node cũng có thể không được gán nhãn hoặc gán nhiều nhãn

Hình 2.5: Các Node Hình 2.5 thể hiện các thông tin có thể có trong một node

Một đồ thị đơn giản, chứa một Node có một thuộc tính là name = Marko Hình 2.6 thể hiện một node đơn giản nhất Node có ít nhất một thuộc tính

Hình 2.6: Một Node có một thuộc tính

2.1.2.2 Relationships

Quan hệ là dây kết nối giữa các nodes, còn được gọi là cạnh Cũng giống như các Node, Relationship cũng có thuộc tính Hình 2.7 thể hiện một relationship phải có ít nhất một nút bắt đầu và một nút kết thúc Relationship cũng có thuộc tính, và có tên gọi của loại relationship

Trang 19

Hình 2.7: Relationships Một quan hệ liên kết hai Node, và đảm bảo có Node bắt đầu và Node kết thúc Hình 2.8 biểu diễn cơ bản về quan hệ giữa 2 node

Hình 2.8: Quan hệ giữa hai Node Một quan hệ thì luôn luôn có hướng, chúng có thể có hướng đi vào hoặc đi ra một Node, điều này là hữu ích cho việc duyệt đồ thị Hình 2.9 thể hiện sự có hướng của quan hệ giữa các node

Hình 2.9: Quan hệ vào/ra một Node Các quan hệ theo hướng này hay hướng kia Điều này có nghĩa là không cần phải thêm những quan hệ trùng lắp theo hướng ngược lại

Lưu ý, một Node có thể có quan hệ với chính nó Hình 2.10 thể hiện một node có quan hệ với chính nó

Trang 20

Hình 2.10: Quan hệ loop

Để tăng cường thêm khả năng duyệt đồ thị, tất cả các quan hệ đều phải có một kiểu Hình 2.11 thể hiện giữa các node có thể có nhiều quan hệ, và quan hệ thì có thể có nhiều kiểu khác nhau

Hình 2.11: Các kiểu của Relationship

Lưu ý, null không phải là một giá trị Properties hợp lệ

Hình 2.12 thể hiện một thuộc tính có chứa ít nhất một giá trị và giá trị đó phải được đại diện bằng một key

Trang 22

Hình 2.13: Tên nhãn

Ví dụ, chúng ta gán một nhãn cho một kiểu người dùng nào đó, tất cả các node đại diện cho các người dùng đó đều có cùng một nhãn Khi đó, chúng ta sẽ dễ dàng cho việc yêu cầu Neo4j chỉ thực hiện các phép toán trên những node người dùng đó, chẳng hạn như tìm tất cả các người dùng có nhãn đó

Tuy nhiên, chúng ta có thể sử dụng việc gán nhãn cho những mục đích khác

Ví dụ, vì các nhãn có thể được thêm vào và lấy ra trong thời gian chạy nên chúng ta

có thể dùng để đánh dấu các trạng thái tạm cho các node của ta Chúng ta có thể tao

ra một nhãn “Offline” cho những cuộc gọi offline

Bất kỳ một chuỗi unicode khác rỗng nào cũng có thể được dùng để gán nhãn Trong ngôn ngữ truy vấn Cypher, chúng ta cần phải sử dụng các dấu `` để tránh xung đột cú pháp với các quy tắc của Cypher

2.1.2.5 Đường dẫn

Một Path là đường kết nối nhiều Node với Relationship tương ứng, thường là kết quả trả về của một truy vấn hoặc một phép duyệt Hình 2.14 thể hiện các thông số đầy đủ của một đường dẫn

Trang 23

Hình 2.14: đường dẫn Một đường dẫn ngắn nhất có thể có chiều dài là 0 như hình sau:

Hình 2.15: đường dẫn có chiều dài là 0 Theo như hình 2.15 thì một đường dẫn cũng có thể có chiều dài là 0 Chiều dài là 0 tức là không có bất kỳ quan hệ nào

Một đường dẫn có chiều dài là 1 Hình 2.16 thể hiện chiều dài đường dẫn là 1 Một node có tồn tại 1 quan hệ tức là đường dẫn có chiều dài là 1

:

Hình 2.16: đường dẫn có chiều dài là 1

Trang 24

2.2 Ngôn ngữ truy vấn Cypher

2.2.1 Tổng quan về Cypher

Cypher là một ngôn ngữ truy vấn đồ thị, Cypher cho phép thực hiện các câu truy vấn

và cập nhật trên đồ thị một cách hiệu quả mà không cần phải viết code duyệt đồ thị Cypher vẫn đang được xây dựng và phát triển, điều đó có nghĩa là cú pháp của nó có thể sẽ thay đổi trong tương lai

Cypher được thiết kế để trở thành một ngôn ngữ truy vấn con người, nó phù hợp cho

cả các nhà lập trình và các chuyên gia nghiên cứu truy vấn trên cơ sở dữ liệu Cấu trúc của Cypher gọn gàng và dễ hiểu

Các từ khóa của Cypher:

- ID của Node hoặc Relationship

- MATCH: biểu thức truy vấn

- WHERE: điều kiện lọc

- RETURN: trả về cái gì

- CREATE: tạo các node và relationship

- DELETE: xóa các node, relationship và thuộc tính

- SET: đặt giá trị cho thuộc tính

- FOREACH: thực thi cập nhật cho mỗi phần tử trong danh sách

- WITH: chia nhỏ câu truy vấn thành nhiều phần

Trang 25

Ví dụ: Cho đồ thị sau

Hình 2.17 đồ thị có nhiều quan hệ liên kết với nhau

Viết truy vấn tìm người tên là John sau đó duyệt trên đồ thị tìm những người bạn của bạn John (friend-of-friend) viết tắt là fof

Match n-[friend]->()-[friend]->(fof) where n.name = „John‟ return n, fof

Kết quả trả về là: Node[4], Node[2], Node[3]

Tiếp theo ta thêm vào bộ lọc để thực hiện truy vấn Chúng ta bắt đầu với danh sách người dùng thông qua ID của các Node (5, 4, 1, 2, 3), duyệt đồ thị để tìm kiếm các người dùng khác có relationship đi ra “friend” so với các nút bắt đầu và có thuộc tính name bắt đầu bằng ký tự S

Trang 27

Cypher sẽ tạo một giao tác để chạy các truy vấn và bảo đảm:

 Nếu không có một giao dịch nào đang chạy thì Cypher sẽ tạo và ủy thác cho

nó cho đến khi truy vấn hoàn thành

 Trong trường hợp đã có một giao tác đang tồn tại thì truy vấn sẽ chạy trong giao tác đó

2.2.4 Cú pháp

2.2.4.1 Toán tử

Toán tử số học: +, -, *, /, %

Phép toán so sánh: =, <>, <, >, <=, >=

Phép toán logic: AND, OR, XOR, NOT

Nối chuỗi bằng phép toán +

Tập hợp cũng có thể được nối lại với nhau bằng phép toán + Để kiểm tra một phần tử

có tồn tại trong một tập hợp hay không ta có thề dùng phép toán IN

2.2.4.2 Biểu thức

Một biểu thức trong Cypher có thể là:

 Số nguyên, số thực: 13, 40000, 3.14

 Chuỗi: “Hello”, „World‟

 Boolean: true, false, TRUE, FALSE

 Gọi hàm : length(p), nodes(p)

 Tham số: {param}, {0}

 Tập hợp: [“a”, “b”], [1,2,3], [“a”, 2, n.property, {param}], []

Trang 28

 Biếu thức IF/ELSE, CASE

Để trả về một node, ta có thể viết câu truy vấn như sau:

MATCH n WHERE n.name=‟B RETURN n

Kết quả trả về là: nút có thuộc tính name = „B‟

Kết quả trả về là: danh sách quan hệ dạng [KNOWS] với nút bất kỳ mà nút n có

thuộc tính name = „A‟ có quan hệ [KNOWS]

Return all elements

Khi chúng ta muốn trả về tất cả các Node, Relationship và đường dẫn được tìm thấy trong một câu truy vấn, ta có thể sử dụng ký tự *

MATCH p=a-[r]->b WHERE a.name=‟A‟ RETURN *

Kết quả trả về là hai Node với quan hệ và đường dẫn:

Trang 29

Bảng 2.1 kết quả trả về tất cả các node của đồ thị

2.2.5.2 Mệnh đề ORDER BY

Để sắp xếp kết quả trả về chúng ta sử dụng mệnh đề ORDER BY

Sắp xếp các Node theo thuộc tính

Để sắp xếp các Node trả về theo thuộc tính ta có thể viết câu truy vấn như sau:

MATCH(n) RETURN n ORDER BY n.name

Sắp xếp các Node theo nhiều thuộc tính

MATCH(n) RETURN n ORDER BY n.age, n.name

Chúng ta có thể sắp xếp theo nhiều thuộc tính trong mệnh đề ORDER BY Cypher sẽ sắp xếp theo tuần tự các biểu thức trong mệnh đề ORDER BY

Sắp xếp theo thứ tự giảm dần

MATCH(n) RETURN n ORDER BY n.age DESC, n.name DESC

Bằng cách sử dụng DESC, chúng ta có thể sắp xếp theo thứ tự giảm dần

2.2.5.3 Mệnh đề LIMIT

LIMIT cho phép chúng ta giới hạn kết quả trả về trong tập kết quả

MATCH(n) RETURN n ORDER BY n.name LIMIT 3

LIMIT được sử dụng để hạn chế truy vấn đến 3, vì vậy nếu kết quả có nhiều hơn 3 thì cũng chỉ có 3 được trả về Nhưng nếu kết quả dưới 3 thì sẽ trả về tất cả

2.2.5.4 Mệnh đề SKIP

Trang 30

Tương tự như LIMIT, SKIP cũng trả về một tập con trong tập kết quả SKIP sẽ lấy kết quả được tính từ trên xuống Khác với LIMIT, SKIP phải được dùng chung với mệnh

đề ORDER BY

Để trả về một tập con trong tập kết quả, tính từ kết quả thứ 4, chúng ta có câu truy vấn như sau:

MATCH n RETURN n ORDER BY n.name SKIP 3

Trả về kết quả nằm trong một khoảng giữa

Để trả về một tập con được tính từ khoảng giữa nào đó, ta viết truy vấn như sau: MATCH n RETURN n ORDER BY n.name SKIP 1 LIMIT 2

Câu truy vấn trên được sắp xếp theo tên nên chúng ta sẽ có 5 Node là A, B, C, D, E Chúng ta đã SKIP node đầu tiên (SKIP 1) nên Node A được giữa lại, và tiếp theo ta chỉ lấy giới hạn là hai Node (LIMIT 2) Vì vậy kết quả trả về chỉ có 2 Node là B và C

2.2.5.5 Mệnh đề WHERE

Để lọc một phần dữ liệu trong kết quả tìm kiếm, ta có thể sử dụng mệnh đề WHERE Lọc theo thuộc tính của Node

MATCH n WHERE n.age < 30 RETURN n

Nút thỏa điều kiện age < 30 thì được trả về

Lọc theo kiểu của Relationship

MATCH (n)-[r]->() WHERE n.name=‟Andres‟ AND type®=~ „K.*‟ RETURN r Kết quả trả về là những Relationship có tên kiểu bắt đầu bằng ký tự K.

Ngày đăng: 16/08/2020, 10:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w