5 Mã nguồn mở Lucene, Solr và Nutch
5.3 Mã nguồn mở Nutch
Nutch là một cài đặt mã nguồn mở của một search engine đƣợc Doug Cutting – Ngƣời sáng lập của cả Lucene và Hadoop, và Mike Cafarella khởi đầu. Nó cung cấp tất cả công cụ cần thiết để xây dựng một search engine.
Các lý do để tự xây dựng một Search Engine:
1. Transparency (sự trong suốt). Nutch là mã nguồn mở, vì thế mọi ngƣời có thể thấy đƣợc cách các thuật toán xếp hạng hoạt động. Với những search engines thƣơng mại, sự chi tiết về thuật toán là bí mật vì thế không thể biết một kết quả tìm kiếm đƣợc xếp hạng nhƣ thế nào. Hơn thế nữa, một vài search engines cho phép việc xếp hàng dựa trên việc trả tiền. Nutch phù hợp cho việc giảng dạy và các tổ chức chính phủ, khi mà sự rõ ràng của việc xếp hạng là quan trọng hơn.
2. Understanding (Sự hiểu biết). Chúng ta không có mã nguồn của Google, vì thế Nutch có lẽ là thứ tốt nhất chúng ta có. Rất thú vị để thấy cách hoạt động của một search engine lớn. Nutch còn thu hút các nhà nghiên cứu muốn thử các thuật toán tìm kiếm mới vì nó rất dễ mở rộng.
3. Extensibility (Sự mở rộng). Không thích cách các search engine khác hiển thị kết quả? Tự viết search engine sử dụng Nutch! Nutch rất mềm dẻo, nó có thể đƣợc tùy chỉnh và tích hợp vào trong ứng dụng.
56
Các tính năng chính của Nutch:
Thu thập dữ liệu, phân tích và đánh chỉ mục song song và phân tán thông qua việc sử dụng MapReduce và hệ thống file phân tán (Hadoop).
Hỗ trợ đánh chỉ mục nhiều loại định dạng: plain text, HTML, XML, ZIP, OpenDocument (OpenOffice.org), Microsoft Office (Word, Excel, Powerpoint), PDF, JavaScript, RSS, RTF…
Sử dụng cơ sở dữ liệu đồ thị liên kết (Link-graph database) để sử dụng trong thuật toán PageRank.
Hình 23. Sơ đồ hoạt động của Nutch khi sử dụng như một Crawler
Đầu tiên, có tập URLs khởi tạo, thông qua Injector chuyển nó vào CrawlDB. CrawlDB thông qua Generator sẽ tạo ra một Segment (lúc này trong Segment sẽ có một thƣ mục crawl_generate chứa các URLs cần thu thập dữ liệu). Fetcher sẽ dùng các URLs trong Segment để thu thập dữ liệu từ các trang web và cập nhật lại Segment (lúc này, Segment sẽ có thêm các dữ liệu thu thập đƣợc). Parser sử dụng dữ liệu trong Segment để phân tích ra text, URLs, metadata… Sau đó CrawlDBTool sẽ cập nhật thêm các URLs mới từ các trang web thu thập đƣợc vào trong CrawlDB. Quá trình này sẽ đƣợc lặp đi lặp bao nhiêu lần tùy theo việc cấu hình độ sâu cần thu thập trên mỗi trang web.
57
Hình 24. Sơ đồ đầy đủ của Nutch khi sử dụng như một Search Engine
Trong hình trên, dữ liệu thu thập từng phần (Segments) đƣợc sử dụng để tạo ra LinkDB (cơ sở dữ liệu chứa các liên kết). Sau đó Indexer sử dụng Segments, LinkDB và CrawlDB để đánh chỉ mục (sử dụng Lucene) tạo ra Index. Segments chứa các dữ liệu đã thu thập đƣợc, LinkDB đƣợc sử dụng trong thuật toán PageRank lúc đánh chỉ mục và CrawlDB chứa các URLs đã thu thập đƣợc. Searcher tìm kiếm các kết quả trong Index để trả về cho giao diện ngƣời dùng (Web).