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 2LUẬ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 3LỜ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 4Tô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 5CHƯƠ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 62.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 7Hì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 8Hì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 9Bả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 10CHƯƠ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 11Hì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 121.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 13Phé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 14CHƯƠ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 152.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 162.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 17Hì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 182.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 19Hì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 20Hì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 22Hì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 23Hì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 242.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 25Ví 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 27Cypher 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 29Bả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 30Tươ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.