MỤC LỤC
MỤC LỤC 1
LỜI CẢM ƠN 3
MỞ ĐẦU 4
Chương 1: TỔNG QUAN VỀ MẠNG CHIA SẺ FILE NGANG HÀNG 6
1.1. Giới thiệu về mạng ngang hàng (peer to peer – P2P) 6
1.1.1. Khái niệm cơ bản 6
1.1.2. Đặc điểm của các mạng ngang hàng 7
1.1.3. Tiện ích mạng P2P mang lại. 7
1.1.4. Những khó khăn trong thiết kế mạng ngang hàng 8
1.1.5. Phân loại các ứng dụng mạng ngang hàng 9
1.2. Mô hình mạng P2P 9
1.2.1. Mô hình tập trung 9
1.2.2. Mô hình phân tán. 12
1.3. Ưu, nhược điểm của P2P 13
1.3.1. Ưu điểm 13
1.3.2. Nhược điểm 14
1.4. Một số ứng dụng chia sẻ file ngang hàng 14
1.4.1. Hoạt động của Napster 15
1.4.2. Hoạt động của Gnutella 16
1.4.3. So sánh Gnutella và Napster 17
1.5. Một số nghiên cứu lý thuyết 18
Chương 2: MÔ TẢ MỘT SỐ PHƯƠNG PHÁP, KỸ THUẬT TẠO CHỈ MỤC CHO TÀI LIỆU VÀ TÌM KIẾM DỰA TRÊN CHỈ MỤC 20
2.1. Tổ chức chỉ mục tìm kiếm 20
2.2. Tạo chỉ mục 20
2.3. Tìm kiếm dựa trên chỉ mục 22
2.4. Xếp hạng kết quả tìm kiếm 23
Chương 3: GIẢI PHÁP XÂY DỰNG ỨNG DỤNG 26
3.1. Khái quát ý tưởng 26
3.2. Cấu trúc chỉ mục 29
3.3. Đánh giá giải pháp 31
Chương 4: CÀI ĐẶT CHƯƠNG TRÌNH 33
4.1. Mô tả về thư viện mã nguồn mở Lucene 33
4.1.1. Khái quát về Lucene 33
4.1.2. Tổ chức chỉ mục logic của Lucene 34
4.1.3. Xây dựng và khai thác chỉ mục trong Lucene 35
4.2 Tổ chức chương trình 36
4.2.1. Khối chức năng cơ bản 36
4.2.2. Khối giao diện người dùng. 40
4.2.3. Khối giao tiếp ngang hàng. 42
4.2.4. Sơ đồ lớp của chương trình. 44
Chương 5: KẾT QUẢ THỰC HIỆN CHƯƠNG TRÌNH 45
5.1. Tìm kiếm theo nội dung 45
5.2. Theo dõi trạng thái chia sẻ và nội dung tài liệu 48
KẾT LUẬN VÀ CÁC HƯỚNG PHÁT TRIỂN 51
Phụ lục: MÃ NGUỒN MỘT SỐ LỚP QUAN TRỌNG 52
TÀI LIỆU THAM KHẢO 67
68 trang |
Chia sẻ: lynhelie | Lượt xem: 1966 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng ứng dụng dựa trên mạng ngang hàng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ở hình dưới đây. Các khối có thể cùng kích thước hoặc được phân chia theo cấu trúc nội dung: đoạn tài liệu (paragraph), tệp tài liệu (file),
Tạo chỉ mục theo cấu trúc file đảo ngược sử dụng kỹ thuật đánh địa chỉ khối
2.3. Tìm kiếm dựa trên chỉ mục
Dựa trên hệ thống chỉ mục được tổ chức theo cấu trúc file đảo ngược, thuật toán tìm kiếm thường tuân theo 3 bước sau:
Tìm kiếm trên bảng từ vựng: Tách, phân tích xâu truy vấn thành các từ đơn hoặc các cụm từ. Thực hiện tìm kiếm các từ, cụm từ này trên bảng từ vựng.
Thu thập danh sách thông tin vị trí của các từ, cụm từ tìm được sau bước một thông qua bảng vị trí.
Xử lý các thông tin thu thập được từ bước hai và tạo ra danh sách kết quả tìm kiếm.
Do bảng từ vựng được sắp xếp theo thứ tự từ điển nên thao tác tìm kiếm trên đó mất một chi phí cỡ O(logn) bằng cách sử dụng thuật toán tìm kiếm nhị phân. Bước thứ hai của thuật toán đơn giản chỉ là thu thập lại danh sách về thông tin vị trí của các từ đơn lẻ xuất hiện trong truy vấn thỏa mãn kết quả tìm kiếm trên bảng từ vựng. Bước thứ ba tương đối phức tạp trong trường hợp phải tìm kiếm cho các cụm từ. Khi đó người ta phải tổ chức tìm kiếm đồng thời trên các danh sách ứng với các từ đơn có mặt trong cụm. Bằng phương pháp trộn nhiều danh sách được sắp theo thứ tự vị trí người ta có thể tìm được những chuỗi tuần tự các từ theo đúng thứ tự trong cụm. Trong trường hợp chỉ mục có sử dụng kỹ thuật đánh địa chỉ khối, ta sẽ phải tiếp tục duyệt tuần tự bên trong nội dung của nhiều khối thu được từ các danh sách thông tin về vị trí để tìm ra những cụm thỏa mãn. Các xấp xỉ được đánh giá bằng lý thuyết cũng như các kết quả thực nghiệm cho thấy việc sử dụng chỉ mục theo cấu trúc file đảo ngược đem lại một thời gian tìm kiếm cũng như kích thước cần lưu trữ tăng theo kích thước file văn bản với một tốc độ chậm hơn tốc độ tăng của hàm tuyến tính. Điều này là không thể đạt được khi thực hiện tạo chỉ mục theo các cấu trúc khác.
2.4. Xếp hạng kết quả tìm kiếm
Khi tiến hành truy vấn tìm kiếm theo nội dung một tập hợp văn bản cho trước (gọi là thư viện) thì người dùng không chỉ muốn nhận về danh sách kết quả tìm kiếm mà họ còn muốn danh sách này phải được sắp xếp theo một tiêu chí nào đó. Tiêu chí này chính là độ liên quan (relevance) giữa các kết quả với truy vấn tìm kiếm do người dùng đưa ra. Việc này quy về bài toán xác định độ liên quan giữa một truy vấn q với các tài liệu trong một thư viện C cho trước. Bài toán này đã được nghiên cứu khá chi tiết và toàn diện trong lĩnh vực truy xuất thông tin. Trong mục này, chúng tôi sẽ trình bày tóm lược nội dung của một thuật toán xác định độ liên quan nổi tiếng và hiện đang được sử dụng rộng rãi. Đó là thuật toán TF-IDF [12].
Xét bài toán trong trường hợp đơn giản: ta xem mỗi truy vấn q gồm một tập hợp các từ khóa ki . Với một văn bản D bất kỳ thuộc thư viện C thì ta có:
R(q) = Σ R(ki) (2.3.1)
Trong đó R(q) là độ liên quan của q với D còn R(ki) là độ liên quan của từ khóa ki với D.
Nếu một từ khóa ki xuất hiện nhiều lần hơn từ khóa kj trong văn bản D thì khi chỉ xét trong phạm vi văn bản D ta có thể nói rằng từ khóa ki mang ý nghĩa quan trọng hơn từ khóa kj. Hay trong phần lớn các trường hợp ta có thể rút ra rằng từ khóa ki có ảnh hưởng tới nội dung của văn bản D lớn hơn hay R(ki) > R(kj). Vậy tần suất xuất hiện của một từ khóa trong văn bản tỉ lệ thuận với độ liên quan của nó với văn bản đó. Đại lượng tần suất xuất hiện này của từ khóa ki được gọi là tf(i) (tf viết tắt của term frequency).
Mặt khác nếu ta xét trên phạm vi toàn bộ thư viện C chứ không chỉ trong văn bản D nữa thì có một vấn đề khác nảy sinh. Nếu một từ khóa k xuất hiện trong văn bản D và cũng xuất hiện trong nhiều văn bản khác thuộc C thì ta có thể thấy từ khóa k không còn mang tính đặc trưng cho văn bản D nữa. Lúc này không chỉ có văn bản D mà từ khóa k còn liên quan tới nội dung của nhiều văn bản khác nữa. Khái quát điều này ta có thể suy ra nếu từ khóa k xuất hiện trong càng nhiều văn bản thuộc C thì độ liên quan của nó đến D phải càng nhỏ hay R(k) tỉ lệ nghịch với số văn bản trong C có chứa từ khóa k. Để định lượng cho tính chất này, đối với từ khóa ki ta đưa vào tham số idf(i) được tính như sau:
idf(i) = log(N/ni) (2.3.2)
Trong đó N là số văn bản có trong C và ni là số văn bản trong C có chứa ki. idf(i) sẽ tăng khi ni giảm nghĩa là có ít văn bản trong C chứa ki (idf viết tắt của inverse document frequency).
Từ hai nhận xét quan trọng trên ta có thể rút ra rằng:
R(ki) = tf(i) * idf(i) (2.3.3)
Từ hai công thức (2.3.1) và (2.3.3) ta có thể suy ra công thức ước lượng độ liên quan của truy vấn q với một văn bản D thuộc C như sau:
R(q) = Σ (tf(i) * idf(i)) (2.3.4)
Như vậy ta có thể sắp xếp các văn bản thuộc C theo thứ tự giảm dần của đại lượng R(q). Nếu đặt một ngưỡng dưới đối với giá trị này thì ta sẽ lọc ra được một danh sách các tài liệu kết quả có độ liên quan với q giảm dần. Đó chính là nội dung của thuật toán TF-IDF .
Chương 3: GIẢI PHÁP XÂY DỰNG ỨNG DỤNG
3.1. Khái quát ý tưởng
Trong mục này chúng tôi sẽ đưa ra giải pháp xây dựng một chương trình ứng dụng chia sẻ file trong mạng ngang hàng theo kiến trúc lai ghép cung cấp khả năng tìm kiếm theo nội dung đối với các tài liệu thuần văn bản (viết tắt là tài liệu). Ứng dụng cần đảm bảo thực hiện được 3 chức năng lớn sau:
Cho phép người dùng tại các điểm nút khi tham gia vào mạng có thể tiến hành chia sẻ và dừng chia sẻ các tài liệu nằm trên máy của mình.
Cho phép người dùng có thể đưa ra những truy vấn để tìm kiếm theo nội dung các tài liệu hiện đang được chia sẻ trên phạm vi toàn mạng.
Cho phép người dùng tải về các tài liệu được chia sẻ nằm trên một điểm nút khác.
Luồng thông điệp giữa các thành phần trong mạng.
Để thực hiện được ba chức năng lớn nêu trên chương trình sẽ được tách thành hai thành phần triển khai ở hai phía: phía các điểm nút và phía máy chủ tìm kiếm. Nhiệm vụ của thành phần triển khai trên máy chủ tìm kiếm:
Tổ chức xây dựng và cập nhật chỉ mục tìm kiếm.
Tiếp nhận truy vấn từ các điểm nút, tìm kiếm dựa trên chỉ mục và trả về danh sách kết quả.
Nhiệm vụ của thành phần triển khai tại các điểm nút:
Gửi tới máy chủ tìm kiếm các yêu cầu đăng nhập vào và đăng xuất ra khỏi hệ thống chia sẻ file ngang hàng.
Tiếp nhận yêu cầu của người dùng và gửi đến máy chủ tìm kiếm các thông báo chia sẻ hoặc dừng chia sẻ các file được lưu trữ tại các điểm nút.
Tiếp nhận truy vấn do người dùng nhập, gửi đến máy chủ tìm kiếm và tổ chức hiển thị kết quả trả về.
Tiếp nhận và gửi yêu cầu tải tài liệu kết quả của người dùng tới điểm nút đích. Đóng vai trò là phía client trong hoạt động tải tài liệu.
Tiếp nhận yêu cầu tải tài liệu được chia sẻ trên máy cục bộ và đóng vai trò một server cung cấp tài liệu cho các điểm nút khác.
Vấn đề cơ bản và khó khăn nhất của một hệ thống tìm kiếm theo nội dung là tổ chức tạo chỉ mục cho các tài liệu đồng thời duy trì việc cập nhật cho hệ thống chỉ mục này. Trong khuôn khổ một ứng dụng chia sẻ file ngang hàng, có ba sự kiện xảy ra ở phía các điểm nút đòi hỏi phải tiến hành cập nhật hệ thống chỉ mục là: chia sẻ một tài liệu, dừng chia sẻ một tài liệu và đăng xuất khỏi hệ thống. Bởi vì đó là ba sự kiện dẫn đến việc thay đổi thông tin liên quan tới tính tồn tại của một tài liệu trong mạng chia sẻ file ngang hàng. Bài toán đặt ra là phải tiến hành cập nhật hệ thống chỉ mục tập trung nằm trên máy chủ tìm kiếm cho tất cả các tài liệu được lưu trữ phân tán, rải rác trên các điểm nút. Để giải quyết bài toán này, chúng tôi đề xuất giải pháp phân chia việc việc cập nhật chỉ mục làm hai bước. Bước đầu tiên được thực hiện tại các điểm nút và bắt đầu khi có một trong ba sự kiện nói trên xảy ra. Sau khi bước này kết thúc, các điểm nút thông báo tới máy chủ tìm kiếm để thực hiện bước thứ hai là cập nhật trực tiếp vào hệ thống chỉ mục tập trung. Chi tiết hơn, với mỗi sự kiện xảy ra ở phía điểm nút ta sẽ thực hiện như sau:
Với sự kiện một tài liệu được chia sẻ: Bước đầu tiên, điểm nút sẽ tạo chỉ mục cho tài liệu được chia sẻ. Kết thúc bước này, bảng chỉ mục nhỏ của tài liệu này được chuyển lên cho máy chủ tìm kiếm. Tại máy chủ tìm kiếm, bước thứ hai là trộn bảng chỉ mục nhỏ này với bảng chỉ mục tập trung hiện thời để tạo ra một bảng chỉ mục tập trung mới.
Với sự kiện dừng chia sẻ một tài liệu: Điểm nút sẽ thực hiện bước đầu tiên và xác định được định danh của tài liệu sẽ dừng chia sẻ. Định danh này được chuyển lên cho máy chủ tìm kiếm. Máy chủ tìm kiếm sẽ tiến hành xóa bỏ các thông tin chỉ mục liên quan đến tài liệu này trong bảng chỉ mục tập trung.
Đăng xuất khỏi hệ thống: Hành động này của một điểm nút tương đương với việc dừng chia sẻ tất cả các tài liệu hiện đang được chia sẻ trên điểm nút đó. Sau bước đầu tiên, điểm nút cần chuyển tới cho máy chủ tìm kiếm định danh của chính nó và công việc của máy chủ tìm kiếm là tìm và xóa bỏ mọi thông tin chỉ mục liên quan đến các tài liệu được chia sẻ nằm trên điểm nút này.
Ngoài ra chúng ta cần quan tâm tới một sự kiện nữa xảy ra khi người dùng trên một điểm nút tiến hành cập nhật lại file tài liệu mà nội dung của nó đã có sự thay đổi tính từ lần chia sẻ đầu tiên hoặc từ lần cập nhật cuối cùng. Ta có thể xem sự kiện này tương đương với việc xảy ra liên tiếp hai sự kiện: dừng chia sẻ tài liệu đã thay đổi nội dung và sau đó tiến hành lặp lại bước chia sẻ chính tài liệu đó.
Một điểm cần chú ý là máy chủ tìm kiếm sẽ tiến hành cập nhật chỉ mục tập trung trong điều kiện tương tranh (concurrent). Nghĩa là máy chủ tìm kiếm có thể phải nhận đồng thời nhiều yêu cầu cập nhật chỉ mục tập trung từ các điểm nút. Có thể thấy rằng nếu không đồng bộ hóa các hoạt động cập nhật này thì sẽ dẫn đến tình trạng dữ liệu (chỉ mục) trở nên không hợp lệ do cùng lúc bị thay đổi bởi nhiều tiểu trình chạy song song.
Hình vẽ dưới đây mô tả một cách trực quan các bước trong quá trình tạo chỉ mục bộ phận và cập nhật chỉ mục tập trung cũng như hành động truy vấn tìm kiếm và tải về các file dữ liệu.
Hoạt động của cơ chế cập nhật chỉ mục và tìm kiếm dựa trên chỉ mục.
3.2. Cấu trúc chỉ mục
Từ yêu cầu chức năng của các thành phần trong hệ thống cũng như dựa trên giải pháp được đề xuất trong việc cập nhật từng bước hệ thống chỉ mục tìm kiếm ta có thể xác định được những thông tin của mỗi tài liệu cần thiết phải lưu trong chỉ mục:
Các trường thông tin liên quan đến định danh của tài liệu:
session_id: Đây là thông tin định danh của một điểm nút do máy chủ tìm kiếm tạo ra và phân phối cho các điểm nút. Nó có giá trị tính từ lúc điểm nút đăng nhập thành công cho tới lúc đăng xuất. Tại một thời điểm không thể có hai điểm nút có cùng một session_id. session_id cũng là thông tin được gửi tới máy chủ tìm kiếm khi điểm nút thực hiện hành động đăng xuất. Máy chủ tìm kiếm sẽ tìm và xóa mọi thông tin chỉ mục liên quan tới các tài liệu có session_id trùng với giá trị được gửi tới này.
document_id: Đây là thông tin định danh giúp xác định duy nhất một tài liệu hiện đang được chia sẻ trên mạng. Thông tin này do các điểm nút tạo ra và có giá trị từ lúc tài liệu bắt đầu được chia sẻ cho tới lúc dừng chia sẻ hoặc đăng xuất. Thông tin này cũng được lưu trữ lại giúp cho việc quản lý các tài liệu hiện đang được chia sẻ tại từng điểm nút. Khi dừng chia sẻ một tài liệu, điểm nút sẽ gửi document_id của tài liệu đó lên cho máy chủ tìm kiếm và mọi thông tin chỉ mục liên quan tới tài liệu có giá trị document_id này sẽ bị xóa bỏ. Vấn đề đặt ra là làm thế nào để một điểm nút có thể sinh ra giá trị document_id mới không trùng lặp với bất kỳ tài liệu nào hiện đang được chia sẻ trên mạng. Có thể giải quyết vấn đề này nếu document_id được tổ chức theo hệ thống phân cấp tương tự như hệ thống tên miền. Nếu đưa giá trị session_id giúp xác định duy nhất điểm nút vào thì ta có thể tạo ra những miền giá trị của document_id không xung đột nhau.
Các trường thông tin liên quan đến việc định vị tài liệu:
IP_address: Địa chỉ IP giúp một điểm nút có thể thiết lập kết nối tới một điểm nút khác hiện đang lưu trữ tài liệu mà nó cần. Do vậy địa chỉ IP luôn luôn có mặt trong thông tin về tài liệu được trả về trong kết quả truy vấn.
path: Đường dẫn chỉ ra vị trí lưu trữ tài liệu trên điểm nút. Cùng với địa chỉ IP, thông tin đường dẫn này cung cấp cho một điểm nút đầy đủ thông tin để định vị tài liệu mà nó cần. Nếu document_id là định danh logic thì path + IP_address chính là định danh vật lý của mỗi tài liệu.
Các trường thông tin liên quan đến việc tìm kiếm nội dung của tài liệu:
name: tên tài liệu là một thông tin tìm kiếm quan trọng. Thông tin này thường là tiêu chí tìm kiếm duy nhất trong các hệ thống chỉ hỗ trợ tìm kiếm theo định danh.
content: nội dung của tài liệu. Ta sẽ không lưu toàn bộ nội dung của tài liệu mà chỉ lấy nó như một đầu vào của thuật toán tạo chỉ mục theo cấu trúc file đảo ngược.
3.3. Đánh giá giải pháp
Điểm đáng chú ý trong giải pháp của chúng tôi là công việc cập nhật cho bảng chỉ mục tìm kiếm tập trung được thực hiện thông qua sự cộng tác chặt chẽ giữa các điểm nút và máy chủ tìm kiếm. Nếu so sánh với một hệ thống máy tìm kiếm thông thường theo kiến trúc client - server (Google là một ví dụ điển hình) thì công việc này được dồn toàn bộ về phía máy chủ. Điều này đòi hỏi một năng lực xử lý cũng như băng thông rất lớn cho các máy chủ để có thể tải về tất cả các tài liệu trong mạng và sau đó tiến hành tạo chỉ mục. Bên cạnh đó, một nhược điểm nữa của máy tìm kiếm theo kiến trúc client/server so với giải pháp được đưa ra ở đây dành cho kiến trúc ngang hàng là khả năng theo dõi tính tồn tại của các tài liệu chia sẻ trên mạng. Ngay như với máy tìm kiếm mạnh nhất hiện nay trên Internet là Google thì trong danh sách kết quả trả về, người dùng luôn nhận được không ít các địa chỉ liên kết tới các tài nguyên hiện không còn tồn tại. Kiểm tra tính tồn tại của các tài liệu trên toàn mạng trong thời gian thực gần như là một nhiệm vụ không thể thực hiện được. Thay vào đó người ta đề xuất ra phương pháp tiến hành kiểm tra lặp lại theo một chu kỳ nào đó. Phương pháp này về bản chất chỉ là sự rời rạc hóa trục thời gian thành các điểm kiểm tra theo một cách có chọn lựa. Nếu các điểm kiểm tra càng gần nhau thì chi phí cho băng thông và xử lý càng lớn và nếu ngược lại thì khả năng theo dõi sự tồn tại của các tài liệu càng kém tính chính xác. Với giải pháp mà chúng tôi đưa ra ở đây trước hết là đã giúp phân chia công việc cập nhật chỉ mục cho cả hai phía – các điểm nút và máy chủ tìm kiếm – nhằm bảo đảm khai thác tốt hơn tài nguyên của mạng. Sau nữa, việc cập nhật chỉ mục theo sự kiện chính là biện pháp tốt nhất để theo dõi sự tồn tại của các tài liệu chia sẻ trên mạng vì khi đó hoạt động cập nhật chỉ được thực hiện khi thực sự cần thiết và cũng không phải tiến hành kiểm tra lặp lại. Tuy nhiên giải pháp này cũng bộc lộ bất cập khi cùng lúc trên toàn mạng xảy ra quá nhiều sự kiện chia sẻ tài liệu. Khi đó do phải tải về chỉ mục của một số lượng lớn tài liệu được chia sẻ nên lưu lượng mạng dồn về phía máy chủ tìm kiếm sẽ tăng vọt, có thể dẫn đến nguy cơ quá tải với máy chủ tìm kiếm. Để giúp cho hệ thống vẫn hoạt động trong những điều kiện như vậy ta có thể tiến hành nâng cấp khả năng xử lý và mở rộng băng thông đầu vào của máy chủ tìm kiếm. Ngoài ra ta có thể khắc phục bằng cách giảm tỉ lệ kích thước chỉ mục của một tài liệu so với kích thước của chính tài liệu đó. Có thể thực hiện điều này bằng cách áp dụng các cơ chế đánh địa chỉ khối, nén chỉ mục Tuy nhiên việc giảm lưu lượng trên mạng bằng cách thay đổi nội dung, phương pháp tạo chỉ mục có thể dẫn đến tốc độ của quá trình tìm kiếm và chất lượng của kết quả tìm kiếm không được như mong muốn.
Chương 4: CÀI ĐẶT CHƯƠNG TRÌNH
Chương trình thực nghiệm được xây dựng dựa trên ngôn ngữ lập trình Java. Việc sử dụng Java làm ngôn ngữ cài đặt dựa trên một số lý do cơ bản sau:
Java là một ngôn ngữ cho phép xây dựng các ứng dụng chạy trên nhiều nền tảng khác nhau (cross-platform). Điều này bảo đảm khả năng tương thích của chương trình với nhiều nền tảng phần cứng cũng như hệ điều hành trên các điểm nút.
Java cung cấp những cơ chế lập trình mạng và lập trình đa tuyến (multi threading) tiện lợi và hiệu quả.
Trong chương trình thực nghiệm có sử dụng các giao diện lập trình ứng dụng (API) được cung cấp bởi bộ thư viện mã nguồn mở Lucene.
4.1. Mô tả về thư viện mã nguồn mở Lucene
4.1.1. Khái quát về Lucene
Lucene là bộ thư viện mã nguồn mở được xây dựng bằng ngôn ngữ lập trình Java nhằm mục đích hỗ trợ việc truy xuất thông tin [6]. Lucene cung cấp một giao diện lập trình ứng dụng cho phép người phát triển xây dựng các chương trình có khả năng tạo chỉ mục cho những file dữ liệu dạng ký tự và thực hiện tìm kiếm dựa trên chỉ mục. Lucene không quan tâm tới định dạng của các nguồn dữ liệu (ví dụ các định dạng html, doc, pdf, txt, ) miễn là chúng có khả năng chuyển đổi sang dữ liệu thuần văn bản (text). Các gói (package), lớp (class) và phương thức (method) trong Lucene được thiết kế nhằm xoay quanh việc thực hiện hai nhiệm vụ cơ bản sau:
Nhiệm vụ đầu tiên của Lucene là cung cấp khả năng tạo chỉ mục cho các tài liệu để xây dựng nên hệ thống chỉ mục.
Nhiệm vụ thứ hai của Lucene là cung cấp khả năng tiếp nhận các xâu truy vấn của người dùng, thực hiện tìm kiếm dựa trên hệ thống chỉ mục đã có và trả về kết quả.
Cộng đồng những người phát triển dự án mã mở Lucene cũng đã đóng góp công sức tạo nên một số thư viện bổ sung nhằm hỗ trợ việc chuyển đổi từ các định dạng file văn bản phổ biến sang dữ liệu thuần text. Một số thư viện cũng được bổ sung vào để mở rộng khả năng tạo chỉ mục và tìm kiếm đối với những tài liệu được soạn bằng các ngôn ngữ phổ biến khác bên cạnh tiếng Anh.
Nhiệm vụ, chức năng của thư viện Lucene [8].
4.1.2. Tổ chức chỉ mục logic của Lucene
Document: Lucene đưa ra khái niệm Document để khái quát hóa toàn bộ cấu trúc chỉ mục của một tài liệu [8].
Field: Một document bao gồm một dãy các field. Mỗi field bao gồm hai xâu: một xâu là tên của field và một xâu là nội dung của field. Lấy ví dụ nếu ta có một tệp tài liệu cần tạo chỉ mục thì document đại diện cho tài liệu đó có thể sẽ gồm 2 field: tên tài liệu và nội dung tài liệu
Term: Nội dung của một field có thể là một term duy nhất hoặc có thể bao gồm một dãy các term. Một term cũng bao gồm một xâu biểu diễn giá trị nội dung của term đó và một xâu biểu diễn tên field mà term đó thuộc về. Term chính là đơn vị tìm kiếm nhỏ nhất trong một hệ thống chỉ mục. Hai term có giá trị nội dung giống hệt nhau nhưng thuộc về 2 field khác nhau thì được coi là phân biệt. Ví dụ: Một document có 2 field: NAME và CONTENT đại diện cho tài liệu abc.txt và nội dung tài liệu này có chứa một xâu “abc.txt” thì hai term: (NAME, “abc.txt”) và (CONTENT, “abc.txt”) là phân biệt nhau.
4.1.3. Xây dựng và khai thác chỉ mục trong Lucene
Lucene cung cấp nhiều lớp, phương thức liên quan đến việc tạo, cập nhật chỉ mục và tìm kiếm dựa trên chỉ mục. Tuy nhiên trong khuôn khổ ứng dụng này, chúng tôi quan tâm và sử dụng chủ yếu những phương thức của các lớp sau:
Lớp IndexWriter: Cho phép tạo ra hệ thống chỉ mục được lưu trữ trong một thư mục và bổ sung thêm các Document mới vào hệ thống chỉ mục đó (Sử dụng khi tạo chỉ mục ở phía các điểm nút trong sự kiện chia sẻ tài liệu). Lớp này cũng cho phép trộn nhiều hệ thống chỉ mục với nhau để tạo thành một hệ thống chỉ mục mới (Sử dụng khi cập nhật hệ thống chỉ mục ở phía máy chủ tìm kiếm khi có nhiều yêu cầu chia sẻ tài liệu đến từ các điểm nút)
Lớp IndexReader: Các phương thức của lớp này cung cấp khả năng tìm và loại bỏ các thông tin chỉ mục với những tiêu chí xác định. Nó được sử dụng khi có các yêu cầu dừng chia sẻ tài liệu hoặc đăng xuất đến từ phía các điểm nút.
Lớp QueryParser: Được sử dụng để phân tích xâu truy vấn tìm kiếm do người dùng nhập vào và tạo ra các truy vấn hợp lệ của Lucene.
Lớp IndexSearcher: Nhận đầu vào là các truy vấn hợp lệ do QueryParser tạo ra, tìm kiếm trong chỉ mục và trả lại kết quả bao gồm một danh sách các Document có chứa những thông tin liên quan.
4.2. Tổ chức chương trình
Chương trình thực nghiệm sẽ được tổ chức làm ba khối chính và giữa chúng có mối liên hệ mật thiết với nhau.
4.2.1. Khối chức năng cơ bản
Khối này là trung tâm của chương trình thực hiện các chức năng chính và bảo đảm duy trì sự liên lạc giữa điểm nút với máy chủ tìm kiếm. Khối được phân làm hai bộ phận triển khai tại hai phía: phía máy chủ tìm kiếm và phía điểm nút. Truyền thông giữa hai bộ phận sẽ được thực hiện thông qua socket.
Bộ phận triển khai phía máy chủ tìm kiếm bao gồm:
Lớp Server: Lớp này có hai nhiệm vụ cơ bản:
Thường xuyên lắng nghe yêu cầu kết nối đến từ các điểm nút tại cổng 3000. Khi một yêu cầu kết nối được chấp nhận, Server sẽ tạo ra một tiểu trình (thread) riêng thông qua việc tạo mới một đối tượng thuộc lóp ServerThread. Tiểu trình này sẽ giữ vai trò tương tác với bộ phận triển khai ở phía điểm nút tương ứng.
Quản lý việc cập nhật hệ thống chỉ mục tập trung liên quan đến các thao tác bổ sung thêm tài liệu mới được chia sẻ, xoá bỏ tài liệu dừng chia sẻ và xoá bỏ tất cả các tài liệu thuộc về điểm nút thực hiện đăng xuất. Ba phương thức thực hiện nhiệm vụ này là: addDocument (), removeDocument () và removePeer (). Vì máy chủ tìm kiếm phải thực hiện cập nhật chỉ mục tập trung trong điều kiện tương tranh nên cả 3 phương thức này đều phải được đồng bộ hoá thông qua từ khoá synchronized.
Lớp ServerThread: hai nhiệm vụ chính của lớp này là:
Liên tục chạy một vòng lặp để lắng nghe các yêu cầu đến từ phía các điểm nút: chia sẻ, dừng chia sẻ, đăng xuất và gọi tới các phương thức tương ứng của lớp Server như đã nói ở trên đế tiến hành cập nhật chỉ mục tập trung. Kết quả của các hành động được trả lại cho phía điểm nút.
Nhận xâu truy vấn từ phía điểm nút, thực hiện tìm kiếm trực tiếp trong chỉ mục tập trung và gửi trả danh sách kết quả về. Sở dĩ đối tượng thuộc lớp ServerThread có thể tìm kiếm trực tiếp trên chỉ mục tập trung vì hành động tìm kiếm chỉ yêu cầu các thao tác đọc chỉ mục. Thư viện Lucene hỗ trợ nhiều hành động tìm kiếm có thể xảy ra cùng lúc trong khi chỉ mục đang được cập nhật.
Bộ phận triển khai tại các điểm nút bao gồm:
Lớp ClientPeer: thực hiện một loạt các nhiệm vụ cơ bản sau:
Thiết lập một socket kết nối đến máy chủ tìm kiếm và nhận giá trị sessionId được trả về.
Tạo ra một tiểu trình mới lắng nghe các yêu cầu kết nối từ các điểm nút khác bằng cách sinh một thể hiện của lớp FileServer.
Sinh mới một thể hiện của lớp Indexer với nhiệm vụ tạo ra chỉ mục bộ phận cho các tài liệu được chia sẻ.
Quản lý danh sách các tài liệu hiện đang được chia sẻ thông qua một thể hiện của lớp SharedList.
Quản lý danh sách kết quả tìm kiếm trả về từ phía máy chủ thông qua một thể hiện của lớp ResultList.
Chạy một vòng lặp liên tục lắng nghe các thông tin trả về từ phía máy chủ tìm kiếm, cập nhật vào SharedList và ResultList.
Cung cấp một loạt các phương thức được gọi đến khi có sự kiện xảy ra trên giao diện tương tác với người dùng. Ví dụ như phương thức share (),unshare (), search (), update (), logout () được gọi tương ứng với các hành động của người dùng.
Lớp Indexer: nhiệm vụ của lớp này là sinh chỉ mục cho một file tài liệu đầu vào. Một chỉ mục của tài liệu sẽ bao gồm các trường được liệt kê ở bảng sau:
Khuôn dạng các thông điệp trao đổi giữa hai bộ phận trong khối chức năng cơ bản được định nghĩa thông qua việc sử dụng các hằng số của Interface Protocol:
Hằng số INIT: Khi Server chấp nhận yêu cầu kết nối của điểm nút và tạo ra lớp ServerThread tương ứng thì một thông điệp mở đầu bằng hằng số INIT sẽ được gửi về cho điểm nút báo rằng đã thiết lập kết nối thành công.
Hằng số SHARE: Được điểm nút gửi lên cho máy chủ tìm kiếm báo hiệu rằng chuỗi dữ liệu tiếp theo sẽ là nội dung một file thuộc chỉ mục bộ phận của tài liệu vừa được chia sẻ. Máy chủ tìm kiếm sẽ tiếp tục nhận các file được gửi lên cho đến khi có một thông điệp mở đầu bằng hằng số SHARE_FINISH báo hiệu rằng việc truyền chỉ mục bộ phận của tài liệu chia sẻ đã hoàn tất. Ngay lập tức, máy chủ tìm kiếm sẽ thu thập các file thành phần lại để tái tạo chỉ mục bộ phận và tiến hành cập nhật vào chỉ mục tập trung.
Hằng số SHARE_OK: Mở đầu cho thông điệp được máy chủ tìm kiếm gửi về điểm nút báo hiệu rằng việc cập nhật chỉ mục tập trung đối với tài liệu chia sẻ đã hoàn tất. Khi đó đối tượng ClientPeer tại điểm nút mới thực hiện thao tác cập nhật thông tin về file tài liệu vào danh sách chia sẻ thông qua đối tượng SharedList.
Hằng số SHARE_FALL: Mở đầu cho thông điệp được máy chủ tìm kiếm gửi về điểm nút báo hiệu rằng việc cập nhật chỉ mục tập trung đối với tài liệu chia sẻ đã không thành công.
Hằng số UNSHARE: Mở đầu cho thông điệp gửi từ máy chủ tìm kiếm về điểm nút báo hiệu rằng quá trình cập nhật lại chỉ mục tập trung đối với việc dừng chia sẻ file tài liệu đã hoàn tất. Danh sách tài liệu chia sẻ tại điểm nút sẽ được cập nhật lại thông qua đối tượng SharedList.
Hằng số UNSHARE_FALL: Khi quá trình cập nhật chỉ mục tập trung trong trường hợp dừng chia sẻ một file tài liệu trên một điểm nút không được hoàn tất thì máy chủ tìm kiếm sẽ gửi về một thông điệp báo lỗi bắt đầu bằng hằng số này
Các file đính kèm theo tài liệu này:
- Luan van TN_hoa2.doc
- Bao cao pp_hoa.ppt