Hiện nay, tuy tìm kiếm đồ thị của Facebook không thể thay thế các cổ máy tìm kiếm như Google, Yahoo, Ask.com, Bing… nhưng nó vẫn có tính hữu quả nhất định trong việc tìm kiếm thông tin t
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Niên Khóa: Khóa 6
KHÓA LUẬN TỐT NGHIỆP THẠC SĨ
Trang 2Tháng 10 – 2013ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN
Niên Khĩa: Khĩa 6
GVPT: GS.TSKH Hồng Văn Kiếm
Trang 3Tháng 10 – 2013
M c L c ục Lục ục Lục
HỆ THỐNG TÌM KIẾM ĐỒ THỊ THƠNG MINH TRÊN FACEBOOK 6
MỞ ĐẦU 6
CHƯƠNG 1 TỔNG QUAN 7
1.1 Giới thiệu và đặt vấn đề 7
1.2 Lý do chọn đề tài 8
1.3 Mục tiêu của chuyên đề 8
1.4 Phạm vi nghiên cứu và ý nghĩa thực tế của chuyên đề 8
CHƯƠNG 2 CÁC THUẬT TỐN ĐỒ THỊ VÀ CƠ SỞ DỮ LIỆU ĐỒ THỊ NEO4J 9
2.1 Tìm kiếm theo chiều sâu 9
2.2 Thuật tốn tìm kiếm theo chiều rộng 10
2.3 Thuật tốn Dijkstra 12
2.4 Thuật tốn A* 13
2.5 Cơ sở dữ liệu đồ thị Neo4j 14
2.5.1 Giới thiệu về Cơ sở dữ liệu đồ thị Neo4j 15
2.5.2 Duyệt đồ thị trên Neo4j 19
2.5.3 Một vài ví dụ sử dụng truy vấn với Neo4j 20
CHƯƠNG 3 CƠNG CỤ TÌM KIẾM ĐỒ THỊ THƠNG MINH TRÊN FACEBOOK 29
3.1 Giới thiệu 29
3.2 Mục đích và Mẫu tìm kiếm Graph Search trên Facebook 30
3.2.1 Mục đích của Graph Search trên Facebook 30
3.3 Đánh bảng xếp hạng trên Facebook 31
3.4 Thiết lập riêng tư trên cơng cụ tìm kiếm 33
3.5 Một vài mẫu truy vấn 36
3.6 Tối ưu hĩa thương hiệu của bạn trên tìm kiếm đồ thị của Facebook 45
Trang 43.7 Cơ sở dữ liệu đồ thị của Facebook 49
CHƯƠNG 4 KẾT LUẬN VÀ NHẬN XÉT 54
4.1 Kết luận 54
4.2 Nhận xét 54
TÀI LIỆU THAM KHẢO 56
Danh mục các ký hiệu, các chữ viết tắt
API: Application Programing Interface – giao diện lập trình ứng dụng
TF-IDF: Term Frequency Inverse Document Frequency – Thuật toán tìm mức độ phổ
biến của tài liệu
THPT : Trung Học Phổ Thông
TAO:
Danh mục các hình vẽ, đồ thị
Hình 1 Cơ sở dữ liệu Neo4j trang 16 Hình 2 Nút trang 17 Hình 3 Mối quan hệ của nút trang 17 Hình 4 Quan hệ có hướng và kiểu quan hệ trang 18 Hình 5 Thuộc tính của cơ sở dữ liệu đồ thị trang 19 Hình 6 Đường đi(Paths) trang 20 Hình 7 Ví dụ truy vấn đồ thị trang 21 Hình 8 Kết quả tìm kiếm trang 22 Hình 9 Tìm nới yêu thích trang 23 Hình 10 Tìm người dựa trên sở thích trang 24 Hình 11 Nhóm và danh sách bạn bè trang 28 Hình 12 Dựa vào Tag trang 28 Hình 13 Mẫu tìm kiếm trên Facebook trang 31
Trang 5Hình 17 Mở rộng của việc tìm kiếm 2 trang 37Hình 18 Kết quả truy vấn 1 trang 39Hình 19 Kết quả truy vấn 2 trang 40Hình 20 Kết quả truy vấn 3 trang 41Hình 21 Kết quả truy vấn 4 trang 42Hình 22 Kết quả truy vấn 5 trang 43Hình 23 Kết quả truy vấn 6 trang 44Hình 24 Kết quả truy vấn 7 trang 45Hình 25 Kết quả truy vấn 8 trang 46Hình 26 Kết quả truy vấn 9 trang 46Hình 27 Kết quả truy vấn 10 trang 47Hình 28 Quảng cáo trên Graph Search trang 48Hình 29 Quảng cáo trên Graph Search 2 trang 51Hình 30 Mô hình cấu hình TAO của Facebook trang 52Hình 31 Các mối quan hệ của Nút trang 53Hình 32 Cấu hình TAO đa vùng trang 55
Trang 6HỆ THỐNG TÌM KIẾM ĐỒ THỊ THÔNG MINH TRÊN FACEBOOK
MỞ ĐẦU
Tìm kiếm thông tin trên internet là rất hữu ích cho mọi người trong xã hội Giúp cho chúng ta có được thông tin một cách nhanh chóng nhất Internet là kho lưu trữ thông tin khổng lồ của thế giới Để có thể tìm kiếm thông tin một cách nhanh chóng mà không làm khó khăn cho người tìm kiếm Các nhà Công nghệ thông tin đã cho ra đời hàng loạt các
cổ máy tìm kiếm thông tin rất hiệu quả như Google, Yahoo, Bing, Ask.com… Tuy nhiên,việc tìm kiếm trên các cổ máy tìm kiếm đó vẫn cho ra những kết quả sai lệch và số lượng kết quả tìm kiếm là quá lớn Việc lục lội, tìm kiếm trên đống kết quả đó gây khó khăn không nhỏ đối với người tìm kiếm thông tin Như vậy, nhu cầu tìm kiếm thông tin chính xác của con người là vô cùng cần thiết Do đó, cổ máy tìm kiếm thông tin ngữ nghĩa đã
ra đời để đáp ứng nhu cầu đó Một cổ máy tìm kiếm thông tin theo đồ thị, đó là tìm kiếm thông tin đồ thị Facebook Hiện nay, tuy tìm kiếm đồ thị của Facebook không thể thay thế các cổ máy tìm kiếm như Google, Yahoo, Ask.com, Bing… nhưng nó vẫn có tính hữu quả nhất định trong việc tìm kiếm thông tin theo ngữ nghĩa trên mạng xã hội
Facebook Nó giúp người dùng có một hướng tìm kiếm mới, đó là tìm kiếm theo ngữ nghĩa
Em xin chân thành cảm ơn thầy GS.TSKH Hoàng Văn Kiếm – Giảng viên chuyên đề Công nghệ tri thức đã nhiệt tình giảng dạy để truyền đạt những kiến thức vô cùng quý báu, xin chân thành cám ơn ban cố vấn học tập và ban quản trị chương trình đào tạo thạc sĩ Công nghệ thông tin qua mạng của Đại Học Quốc Gia TPHCM đã tạo điều kiện
về tài liệu tham khảo để em có thể hoàn thành chuyên đề này.
Trang 7CHƯƠNG 1 TỔNG QUAN
Tìm kiếm ngữ nghĩa là một khái niệm mà đã được biết đến từ lâu trong tin học, nhưng các ứng dụng của nó đến bây giờ mới thật sự thấy rõ Mặc dù các hệ thống tìm kiếm lớn như Google, Yahoo, Bing, Ask.com rất hiệu quả trong việc giúp người dùng thu thập thông tin như chúng vẫn thực sự chưa hiệu quả với việc tìm kiếm theo ngữ nghĩa Ví dụ, chúng ta nhập một đoạn tìm kiếm sau vào google
“bố của thủ tướng Nguyễn Tấn Dũng”, ta nhận được một danh sách kết quả
khoảng 2.810.000 kết quả liên quan đến thông tin tìm kiếm này Chúng ta cũng nhận kết quả tương tự khi sử Yahoo, Bing, Ask.com để tìm kiếm cụm từ trên Nhưvậy kết quả này quả thật là thiếu chính xác và không hiệu quả, làm hoang mang tâm lý người tìm kiếm thống tin, việc thu thập thông tin vô cùng khó khăn
Tìm kiếm theo ngữ nghĩa giúp cho chúng ta có một kết quả chính xác hơn rất nhiều Và kỹ thuật này đã được áp dụng trong Facebook, mà Facebook gọi đó
là Graph Search
Graph Search là gì? Là một công nghệ của Facebook để tìm kiếm người
và vật mà được kết nối trong mạng xã hội
Mục đích của Graph Search trên Facebook:
- Tìm người mà có cùng sở thích với bạn
- Khám phá thế giới qua ảnh
- Khám phá nhà hàng,shop, cafes, âm nhạc và nhiều hơn thế nữa
Để thực hiện được việc tìm kiếm theo ngữ nghĩa trên xã hội Thì chúng ta phải có một kỹ thuật lưu trữ dữ liệu hợp lý, dữ liệu đó phải có kết nối với nhau và đảm bảo được hiệu năng và hiệu quả của việc tìm kiếm Như chúng ta đã biết các
Trang 8kỹ thuật lưu trư như lưu trữ bằng tập tin, bằng cơ sở dữ liệu quan hệ, bằng cơ sở
dữ liệu không quan hệ(NOSQL), lưu trữ dạng Key-Value[6] và bây giờ là lưu trữ dạng đồ thị Việc lưu trữ các dữ liệu có kết nối chỉ hiệu quả nhất khi chúng ta chọn
cơ sở dữ liệu đồ thị để lưu trữ Và lúc này, các thuật toán đồ thị chúng ta rất dễ dàng để áp dụng, việc tìm kiếm ngữ nghĩa trên dữ liệu có kết nối có tính hiệu quả rất cao trên cơ sở dữ liệu đồ thị Hiệu năng thực hiện các câu truy vấn nhanh hơn rất nhiều so với các cơ sở dữ liệu khác
Trong chuyên đề này, em rất tâm đắc với việc trình bày cơ sở dữ liệu đồ thị trên mạng xã hội và các thuật toán tìm kiếm trên nó cụ thể là cơ sở dữ liệu Neo4j[9] Sau đó em sẽ trình bày chi tiết về công cụ tìm kiếm đồ thị của Facebook , tối ưu hóa các trang để tốt cho việc tìm kiếm và công cụ và kỹ thuật quản lý dữ liệu TAO[4-10] của Facebook
Tìm kiếm theo ngữ nghĩa trên các hệ thống tìm kiếm là vô cùng hữu ích chochúng ta Giúp cho chúng ta có một kết quả tìm kiếm nhanh chóng và chính xác, việc thu thập thông tin được nhanh hơn và chính xác hơn Em chọn đề tài này là muốn giới thiệu đến chúng ta một kỹ thuật tìm kiếm như vậy, mặc dù chúng ta đã biết kỹ thuật này từ lâu trong quá trình học, nhưng lại chưa thấy rõ các ứng dụng mạnh mẽ của nó vào thế giới internet
Mục tiêu của chuyên đề là nghiên cứu cơ sở dữ liệu đồ thị, tìm kiếm đồ thị
và ứng dụng đồ thị Nghiên cứu hệ thống tìm kiếm đồ thị trên Facebook và cách
sử dụng công cụ tìm kiếm ngữ nghĩa hiệu quả
Trang 9Đề tài giới hạn trong phạm vi của các kỹ thuật tìm kiếm trên đồ thị, cơ sở
dữ liệu Neo4j và phép duyệt đồ thị trên Neo4j[9] Các kỹ thuật tìm kiếm trên hệ thống tìm kiếm Facebook, cơ sở quản lý dữ liệu bằng TAO[4-11] của Facebook
Chuyên đề có ý nghĩa giúp cho các nhà tin học có cái nhìn tổng quát về cơ
sở dữ liệu đồ thị và ứng dụng đồ thị Hướng dẫn cho chúng ta sử dụng các công cụtìm kiếm theo ngữ nghĩa nói chung và hệ thống tìm kiếm đồ thị của Facebook nói riêng một cách dễ dàng và chính xác Đề tài này cũng giúp ích cho các doanh nghiệp, các nhà kinh doanh, các nhà tuyển dụng, các nhà marketing tìm thấy những lợi ích của mình trên các hệ thống tìm kiếm của mạng xã hội như Facebooknói riêng và hệ thống tìm kiếm ngữ nghĩa nói chung
CHƯƠNG 2 CÁC THUẬT TOÁN ĐỒ THỊ VÀ CƠ SỞ DỮ LIỆU ĐỒ THỊ
NEO4J
Trong chương này em sẽ giới thiệu một vài thuật toán tìm kiếm đồ thị[7]
mà em được biết và ứng dụng của thuật toán đồ thị trong cơ sở dữ liệu đồ thị Neo4j Mặc dù, Facebook cũng đã công bố các kỹ thuật quản lý dữ liệu đồ thị trên mạng xã hội của công ty này nhưng Neo4j là một cơ sở dữ liệu tiêu biểu cho cơ sở
dữ liệu đồ thị
2.1 Tìm kiếm theo chiều sâu
Tư tưởng chính là Giả sử chúng ta đang xét trên đồ thị G(V,E) Từ một đỉnh
u€V hiện thời nào đó ta sẽ thăm tới đỉnh kề v của u và quá trình được lặp lại đối với đỉnh v ở bước tổng quát, giả sử hiện tại đang xét đỉnh u0, chúng ta sẽ có hai khả năng sẽ xảy ra:
- Nếu như tồn tại một đỉnh v 0 kề với u 0 mà chưa được thăm thì đỉnh v 0 đó sẽ trở thành đỉnh đã thăm và quá trình tìm kiếm lại bắt đầu từ đỉnh v 0 đó.
Trang 10- Ngược lại, nếu mọi đỉnh kề với u 0 đều đã thăm thì ta sẽ quay trở lại đỉnh mà trước đó ta đến đỉnh u 0 để tiếp tục quá trình tìm kiếm.
Như vậy, trong quá trình thăm đỉnh bằng thuật toán tìm kiếm theo chiều sâu, đỉnh được thăm càng muộn càng sớm được duyệt xong (Cơ chế Last In First
Out - Vào sau ra trước) Do đó, ta có thể tổ chức quá trình này bằng một thủ tục
đệ quy như sau:
Trang 112.2 Thuật toán tìm kiếm theo chiều rộng
Thuật toán này thực ra là sự cải biến về thứ tự duyệt đỉnh trên đồ thị của tìm kiếm theo chiều sâu bằng cách thay vì dùng một STACK thì ta lại dùng một hàng đợi QUEUE để kết nạp đỉnh được thăm Như vậy, đỉnh được thăm càng sớm
sẽ càng sớm trở thành duyệt xong (cơ chế First In First Out - Vào trước ra trước) Thủ tục được mô tả dưới đây:
Trang 12Từ hai thuật toán trên, rất nhiều bài toán cơ bản trên đồ thị được giải quyết
rất dễ dàng Vì khuôn khổ chuyên đề, em xin trình bày một số bài toán kinh điển
2.3 Thuật toán Dijkstra
Cho một đồ thị có trọng số dương: G = (V, E), ký hiệu trọng số là w
a, z V Tìm đường đi ngắn nhất từ a đến z
Các ký hiệu:
Với x thuộc V, đặt g(x) = độ dài lộ trình được tìm thấy từ a đến x.
Close = tập các đỉnh đã được duyệt và cũng đã xét các đỉnh kế của nó.
Pre(x) = đỉnh kế trước x trên lộ trình đến x.
Thuật toán Dijstra:
Bước 1: g(a) = 0; pre(a) = “không có”;
Open = {a}; Close = {};
Bước 2:
While Open ≠ {} do{
Trang 13Dừng và kết luận: tìm được lời giải.
2.4: Xét các đỉnh kế y của x, xử lý như sau:
TH1: y là đỉnh mới (không thuộc Open và không thuộc Close)
pre(y) := x;
}}
2.4 Thuật toán A*
Cho một đồ thị có trọng số dương: G = (V, E), ký hiệu trọng số là w.a, z V.Tìm đường đi ngắn nhất từ a đến z
Biết thêm thông tin sau đây: từ mỗi đỉnh x, có có một ước lượng “khoảng cách”
từ x đến mục tiêu Ký hiệu giá trị này là h(x).
Các ký hiệu:
Với x thuộc V, đặt g(x) = độ dài lộ trình được tìm thấy từ a đến x,
h(x): như giả thiết, f(x) = g(x) + h(x)
Close = tập các đỉnh đã được duyệt và cũng đã xét các đỉnh kế của nó.
Pre(x) = đỉnh kế trước x trên lộ trình đến x.
Trang 14Thuật toán cải tiến Dijstra: A*.
2.1: Chọn một x thuộc Open có f(x) nhỏ nhất
2.2: Chuyển x từ Open sang Close
2.3 : if (x là mục tiêu) then
Dừng và kết luận: tìm được lời giải
2.4: Xét các đỉnh kế y của x, xử lý như sau:
TH1: y là đỉnh mới (không thuộc Open và không thuộc Close)
f(y) := g(y) + h(y);
pre(y) := x;
Trang 15Ngoài ra, còn có một vài thuật toán nữa như thuật toán PRIM & KRUSKAL nhưng vì phạm vi của bài chuyên đề nên em chỉ trình bày một vài thuật toán mà được áp dụng cho phần cơ sở dữ liệu đồ thị ở phần sau.
2.5 Cơ sở dữ liệu đồ thị Neo4j
Mạng xã hội đồ thị của Facebook – Cơ sở dữ liệu nằm bên dưới máy tìm kiếm đồ thị(Graph Search) đã được công bố Nó chỉ là một trong những cơ sở dữ liệu đồ thị(Graph databases) được sử dụng cho các dữ liệu lớn, phức tạp, dữ liệu được kết nối Neo4j là một cơ sở dữ liệu khác dẫn đầu về cơ sở dữ liệu đồ thị, mã nguồn mở và được nhiều hãng sử dụng như Cisco, Adobe, Squidoo, Intuit
Neo4j không phải là công nghệ mà các nhà phát triển của Facebook dùng cho sản phẩm của họ, nhưng nó đại diện cho một cơ sở dữ liệu đồ thị mới để xử lý các dữ liệu kết nối phức tạp hơn cả cơ sở dữ liệu Nosql Một vài mã nguồn cho cơ
sở dữ liệu đồ thị như InfiniteGraph, InfoGrid, OrientDB, BigData, DEX,
HyperGraphDB, OQGraph and ArangoDB
Cơ sở dữ liệu đồ thị là một loại của cơ sở dữ liệu NOSQL mà nó có thêm phần xử lý cho dữ liệu có kết nối Dữ liệu có kết nối là phổ biến trong mạng xã hội, mạng lưới logistics(dành cho các gói định tuyến), đồ thị giao dịch tài chính(đểphát hiện gian lận), mạng viễn thông, tối ưu hóa quảng cáo, máy giới thiệu, tin sinh học, và rất nhiều lĩnh vực khác nữa Nên việc lựa chọn Cơ sỡ dữ liệu đồ thị cho các ứng dụng có liên quan đến lĩnh vực trên là hợp lý và mang lại hiểu quả cao
2.5.1 Giới thiệu về Cơ sở dữ liệu đồ thị Neo4j
Cơ sở dữ liệu đồ thị Neo4j là một cơ sở dữ liệu mã nguồn mở được phát triển bởi(Neo4j) dựa trên ý tưởng lý thuyết đồ thị Nó được thiết kế dựa trên cơ sở
dữ liệu quan hệ Tối ưu hóa bằng cấu trúc dữ liệu đồ thị thay vì là dữ liệu bảng
Khi làm việc với Neo4j, cơ sở dữ liệu ứng dụng của bạn sẽ được biểu diễn bằng đồ thị, như đồ thị dưới đây:
Trang 16Hình 1 Cơ sở dữ liệu Neo4j
Nền tảng của mô hình đồ thị là nút(nodes) và các mối quan hệ(relationships) của nút
- Nút(nodes): Trong Neo4j nút và mối quan hệ của nút có thể chưa thuộc
tính(properties) Những nút đại diện cho thực thể(entities), nhưng còn phụ thuộc vào mối quan hệ cụ thể mà có thể được sử dụng với những mục đích khác nhau.Ví dụ:
Trang 17Hình 2 Nút
- Mối quan hệ(relationships):Mối quan hệ giữa các nút là bộ phận quan trọng
của cơ sở dữ liệu đồ thị Chúng cho phép ta tìm kiếm dựa trên mối quan hệ của
dữ liệu Cũng giống như nút, mối quan hệ cũng có thuộc tính của thực thể.Một quan hệ kết nối 2 nút và đảm bảo phải có nút bắt đầu và nút kết thúc Những mối quan hệ trực tiếp, chúng có thể được xem như là cung đi ra(outgoing) và cung
đi vào(incoming) của nút Ví dụ xem hình sau:
Hình 3 Mối quan hệ của nút
Và một nút có thể quan hệ với chính nó:
Quan hệ đi vào
Quan hệ đi ra
Trang 18Tất cả các mối quan hệ có một kiểu quan hệ(relationship type) Ví dụ sau đây cho thấy việc follow của một mạng xã hội đơn giản với hai kiểu quan hệ(relationship type):
Hình 4 Quan hệ có hướng và kiểu quan hệ
Sử dụng quan hệ có hướng và kiểu (type)
người follow Quan hệ follows đi ra, độ sâu 1
Người được follow Quan hệ follows đi vào, độ sâu 1
Người được block Quan hệ block đi vào, độ sâu 1
- Thuộc tính(properties): Cả hai nút(nodes) và mối quan hệ(relationship) đều có
thể có thuộc tính(properties) Thuộc tính là khóa-giá trị mà khóa là chuỗi Giá trị thuộc tính có thể là giá trị của một kiểu dữ liệu nào đó hoặc có thể làm mảng của một kiểu dữ liệu nào đó Ví dụ giá trị string, int[] là giá trị hợp lệ củathuộc tính Chú ý rằng NULL không là giá trị hợp lệ của giá trị thuộc tính Nulls có thể được thay thế là sự vắng mặt của khóa
Trang 19Hình 5 Thuộc tính của cơ sở dữ liệu đồ thị
- Đường đi(Paths): Một đường kết nối có thể qua nhiều nút với việc kết nối qua
các mối quan hệ, thông thường là một truy vấn hay kết quả phép duyệt
Hình 6 Đường đi(Paths)
Đường đi ngắn nhất có độ dài bằng 0, là độ thì có một nút
2.5.2 Duyệt đồ thị trên Neo4j
Trang 20Duyệt đồ thị có nghĩa là viến thăm các nút, những mối quan hệ theo một số luật Hầu như các trường hợp chỉ là một đồ thị con được viến thăm Như bạn đã biết mối quan tâm lớn nhất của đồ thị là nút và mối quan hệ của nút.
Neo4j cung cấp cho chúng ta API mà cho phép chúng ta duyệt đồ thị theo nhiều phép duyệt khác nhau Chúng ta có thể duyệt theo chiều rộng, duyệt theo chiều sâu, A* và Dijkstra
Neo4j cung cấp một framework cho duyệt đồ thị Ngoài ra cũng có lựa chọn khác ở Neo4j cho phép duyệt đồ thị hoặc truy vấn đồ thị bằng ngôn ngữ truy vấn Cypher và Grelin
2.5.3 Một vài ví dụ sử dụng truy vấn với Neo4j
Ở phần này em xin trình bày một vài ví dụ để làm rõ các truy vấn đến cơ sở dữ liệu đồ thị thông qua các API và ngôn ngữ truy vấn Neo4j
Ví dụ: Ta có một hệ cơ sở dữ liệu trang mạng xã hội(chẳng hạn như facebook),
giờ chúng ta có yêu cầu sau:
Ví dụ 1: Lấy ra những thành viên nhóm của một người dùng(user)
Sử dụng phép duyệt của Framework Java API, cấu truy vấn giống như thế này:
Node jale = getNodeByName( "Jale" );
Trang 21Found: Users at depth: 2
Sử dung ngôn ngữ truy vấn Cypher của Neo4j, thì ta viết câu truy vấn cho đề bài trên như sau:
Trang 22Trong Cypher:
START refNode=node(16)
MATCH refNode<-[:ROOT]->root,
p=root<-[PART_OF*0 ]-()<-[:MEMBER_OF]-user
RETURN user.name, min(length(p))
ORDER BY min(length(p)), user.name
Kết quả:
Ví dụ 4 Cho đồ thị sau:
Trang 23Hình 7 Ví dụ về truy vấn đồ thị
- Để tìm kiếm bạn của bạn của Joe
Câu truy vấn như sau:
START joe=node:node_auto_index(name = "Joe")
MATCH joe-[:knows*2 2]-friend_of_friend
WHERE not(joe-[:knows]-friend_of_friend)
RETURN friend_of_friend.name, COUNT(*)
ORDER BY COUNT(*) DESC, friend_of_friend.name
Kết quả trả về như sau:
Trang 24 Số lượng người thích nơi ấy
Câu truy vấn sẽ như sau:
START place=node:node_auto_index(name = "CoffeeShop1") MATCH place<-[:favorite]-person-[:favorite]->stuff
RETURN stuff.name, count(*) ORDER BY count(*) DESC, stuff.name
Kết quả trả về danh sách các nơi được người yêu thích
Trang 25- Tìm kiếm người dựa trên sở thích
Đồ thị sau:
Hình 10 Tìm người dựa trên sở thích
Tìm kiếm những bạn mới dựa trên danh sách ưu thích của họ như “person”Câu truy vấn như sau:
START me=node:node_auto_index(name = "Joe")
Trang 26MATCH me-[:favorite]->stuff<-[:favorite]-person
WHERE NOT(me-[:friend]-person)
RETURN person.name, count(stuff)
ORDER BY count(stuff) DESC
Và đây là kết quả của cấu truy vấn:
- Tìm kiếm người dựa trên nhóm và danh sách bạn bè
Đồ thị sau:
Trang 27Hình 11 Nhóm và danh sách bạn bè
Trong kịch bảng này, vấn đề là xác định nhóm và danh sách bạn bè giữa những người Nếu không tìm thấy danh sách nhóm và bạn bè, thì nó nên được trả về 0.Cấu truy vấn như sau:
START me=node(5), other=node(4, 3)
MATCH other,
pGroups=me-[?:member_of_group]->mg<-[?:member_of_group]-pMutualFriends=me-[?:knows]->mf<-[?:knows]-other
RETURN other.name as name,
count(distinct pGroups) AS mutualGroups,
count(distinct pMutualFriends) AS mutualFriends
ORDER BY mutualFriends DESC
Và kết quả câu truy vấn như sau:
- Tìm kiếm danh sách bạn bè dựa vào những tag
Trang 28Hình 12 Dựa vào Tag
Để tìm kiếm những người mà tương tự như tôi có những tags trên mục yêu thích của họ, tiếp cận như sau:
Xác định tags kết với với favorite
Có những gì khác gắn trên những tag đó
Những mục yêu thích của ai được gắn tag giống nhau
Sắp xếp chúng
Câu truy vấn như sau:
START me=node:node_auto_index(name = "Joe")
MATCH
me-[:favorite]->myFavorites-[:tagged]->tag<-[:tagged]-theirFavorites<-[:favorite]-people
WHERE NOT(me=people)
RETURN people.name as name, count(*) as similar_favs
ORDER BY similar_favs DESC
Kết quả truy vấn như sau: