Thứ Bảy, 31 tháng 1, 2015

Apache Solr hơn cả tuyệt vời để bắt đầu "Full-Text Search"

Trong quá trình phát triển web, với các website đòi hỏi cao về khả năng tìm kiếm, developer thường đối mặt với nhiều vấn đề nếu dùng mysql để thực hiện chức năng này. Ví dụ: tìm kiếm và ranking kết quả với nhiều tiêu chí cùng một lúc, hoặc xây dựng bộ lọc cho tìm kiếm, hay xây dựng một bộ từ điển dùng để autocomplete và sugestion. Khi đó nếu sử dụng mysql thì vấn đề gặp phải sẽ là rất khó để xây dựng quan hệ giữa các bảng, các trường, đồng thời số lượng truy vấn vào mysql là rất nhiều, và phải thực hiện đánh chỉ mục khá đồ sộ. Việc này là thực sự không cần thiết và đôi khi là bất khả thi với những hệ thống được xây dựng trên những máy chủ có sức mạnh không cao. Để nhằm khắc phục những vấn đề gặp phải đó, rất nhiều flatform search engine ra đời, phải kể đến như là sphinx, solr, elasticsearch ... Trong khuôn khổ những bài viết liên quan này, hungls không bàn đến ưu, nhược điểm hay so sánh giữa các flatform mà sẽ đi sâu vào giới thiệu cũng như hướng dẫn để cấu hình một search-engine được đánh giá là rất mạnh hiện nay, đó là Apache Solr.


Giới thiệu:
Solr là một platform mã nguồn mở cung cấp chức năng tìm kiếm phổ biến được phát triển bởi Apache.
Tính năng chính của nó bao gồm khả năng tìm kiếm full-text, highlighting, faceted search, tích hợp cơ sở dữ liệu, xử lý nhiều kiểu văn bản (ví dụ, Word, PDF), và tìm kiếm theo địa điểm. Solr có khả năng mở rộng cao, cung cấp tìm kiếm phân tán và nhân bản Index. Nó cung cấp các tính năng định hướng và tìm kiếm cho nhiều trang web hàng đầu trên thế giới.
Solr cung cấp các API để làm việc. Solr nhập dữ liệu dưới dạng XML thông qua HTTP, hoặc sử dụng thư viện để nhập khối lượng lớn dữ liệu. Người dùng có thể truy vấn dữ liệu này thông qua HTTP GET và nhận về một kết quả dạng XML hoặc JSON. Solr sử dụng Lucene Java làm thư viện cho việc index (đánh chỉ mục) và search (tìm kiếm).

Các chức năng cơ bản của Solr:
- Khả năng tìm kiếm văn bản toàn diện (Full-Text Search) giống kiểu Google.
- Chỉnh sửa để hiệu năng tốt hơn.
- Dựa trên các chuẩn mở trong giao tiếp với các hệ thống khác – XML, JSON và HTTP
- Quản trị dưới dạng giao diện HTML đơn giản
- Thống kê dưới dạng JMX
- Khả năng mở rộng ra nhiều server Solr
- Cấu hình đơn giản dễ dàng với định dạng XML
- Có khả năng bổ sung các phần mở rộng(plugin) mới. Ví dụ như phân tích mở rộng tiếng Việt: Bắt lỗi chính tả, bỏ dấu,…
- Cho phép highlighting kết quả tìm kiếm, như cách mà google hiện thị thông tin tóm tắt về kết quả mà ở đó câu truy vấn được in đậm
- Có thể xây dựng rất nhiều ứng dụng khác mà một trang tìm kiếm cần như: autosuggestion, spellchecking, xây dựng tagcloud, phân loại kết quả clustering (như Bing làm), trending keywords, category navigation, các kết quả liên quan, nhóm kết quả (field collapsed) …
- Cho phép scale hệ thống một cách dễ dàng khi bạn có một lượng lớn dữ liệu mà không đủ chứa trên một máy chủ hay phải phục vụ rất nhiều người dùng đồng thời.
- Solr cũng có thể dùng như CSDL NoSQL hay như cache layer, dùng cho các listing cần performance tốt.
- Solr cũng sắp hỗ trợ realtime cho phép tìm kiếm ngay kết quả sau khi index. Điều nàyđặc biệt khó khi index rất lớn. Hiện tại Solr cho phép kết quả rât nhanh, nhưng phải hy sinh thời gian index. Với dữ liệu lớn có khi bạn phải mất 30 phút hoặc nhiều hơn chỉ để cập nhật được một tài liệu, tuy nhiên có thể sử dụng kiểu cập nhật dữ liệu cho từng bản ghi được thay đổi (đề cập chi tiết ở các phần sau).
- Solr hỗ trợ rất nhiều công cụ để tinh chỉnh kết quả tìm kiếm, bằng tất cả các thông tin mà bạn cung cấp làm sao để kết quả trả về là tốt nhất. Ví dự như đánh trọng số các trường, click log, số lượt view, …

Cài đặt
Solr được viết dựa trên Apache lucene (Là một thư viện được viết hoàn toàn bằng ngôn ngữ Java) bởi vậy, để cài đặt solr, trước tiên máy tính phải được cài java. Nếu máy tính của bạn chưa có java, truy cập vào http://www.oracle.com/us/downloads/index.html để download và cài đặt java. 
Sau khi máy tính đã được cài đặt java thành công, truy cập http://www.apache.org/dyn/closer.cgi/lucene/solr/4.10.3 để download bản mới nhất của solr (hiện tại 4.10.3). Sau khi download xong, giải nén thư mục vừa download. Để khởi động solr: trên linux di chuyển đến thư mục /example trong thư mục vừa giải nén, chạy file start.jar bằng câu lệnh java -jar start.jar. Tương tự với window, bật màn hình thao tác với dos, di chuyển đến thư mục /example  thực hiện java -jar start.jar. Thực tế vì solr được viết bằng java do đó việc cài đặt hết sức đơn giản, chỉ cần copy thư mục và chạy...
Sau khi khởi động solr ta truy cập vào http://localhost:8983/solr để vào giao diện quản trị (cổng mặc định của solr là 8983, tuy nhiên ta có thể thay đổi thiết lập này)

h1. Giao diện quản trị solr

Nói về mặt cấu trúc lưu trữ, Solr cho phép tạo và quản lý nhiều core, để cho người đọc dễ hình dung ta sẽ đi so sánh solr với mysql (tất nhiên sự so sánh này là khập khiễng), mỗi core có thể được hiểu như là một table trong mysql , mỗi core chứa nhiều doc, (doc tương tự như 1 bản ghi trong mysql) và mỗi doc có nhiều trường.

Solr cho phép người dùng tạo ra các kiểu index hay còn gọi là các field type khác nhau, sử dụng các components có sẵn hoặc do người dùng tự viết.

Trên giao diện quản trị, chọn core trong select box "Core Selector"

h2. search khi chưa có dữ liệu

Bạn thử tìm kiếm bằng cách nhập “*:*” ( không có dấu ngoặc kép) vào ô "q" và nhấn execute query. Kết quả sẽ ra dạng XML như trên 
Nhập dữ liệu 
Vì bạn chưa cung cấp dữ liệu cho Solr nên việc tìm kiếm trên trả ra không kết quả. Trong bài viết này chúng ta sử dụng một công cụ Java để nhập dữ liệu dạng XML lên hệ thống Solr. Mở cửa sổ terminal mới( nhớ rằng phải để Jetty chạy ở cửa sổ cũ). Vào thư mục làm việc /example/exampledocs
$ java -jar post.jar *.xml
- Thực hiện lại quá trình tìm kiếm với từ khóa “*:*” bạn sẽ có kết quả khác biệt(Nhớ nhấn tổ hợp phím Ctrl+F5 để FireFox làm tươi lại bộ nhớ cache, trong trường hợp bạn vẫn thấy không kết quả).

h3. kết quả search sau khi nhập dữ liệu
Bạn có thể tham khảo hướng dẫn nhanh ở đây:
http://lucene.apache.org/solr/resources.html#tutorials

Đây là bài giới thiệu mở đầu trong loạt ghi chú về solr. Ở những ghi chú sau, tôi sẽ viết sâu hơn về cấu trúc, và hướng dẫn tích hợp solr vào một trang search cụ thể.
Xin cảm ơn!
(Phần tiếp theo...)

1 nhận xét:

  1. anh ơi mình muốn tìm kiếm 1 cái gì đó(ví dụ: như tìm thông tin tuyển sinh đại học năm 2015) thì làm như thế nào ạ?

    Trả lờiXóa