Apache Solr là một open source full-text search platform dựa trên Apache Lucence. Lucene là một thư viện được viết bằng Java dùng để phân tích, đánh chỉ mục (indexing) và tìm kiếm thông tin được phát triển đầu tiên bởi Doug Cutting.

   Bạn đưa thông tin vào cơ sở dữ liệu (CSDL), đến lúc mà CSDL đó lớn lên, hoặc tìm kiếm nội dung trong cái documement (.xlsx, .docx, .pdf,...) thì việc tìm kiếm một thông tin trong CSDL đó khó khăn và mất nhiều thời gian. Thì việc sử dụng Apache Sorl sẽ giúp cho bạn đơn giản việc tìm kiếm với thời gian nhanh hơn rất nhiều.

   Một cách đơn giản để hiểu về cách vận hành của solr như một cuốn sách được bao gồm phần mục lục sẽ chắt lọc toàn bộ thông tin chính của chuỗi thông tin, và đưa ra số trang dẫn đến thông tin đó. Bằng cách đó thì ta có thể nhanh chóng tìm được thông tin mà mà bạn muốn tìm kiếm. Bạn liệt kê các thành phần, số lượng trang, từ khóa cho thông tin mà bạn muốn thêm vào trong cơ sở dữ liệu thì thông tin sau này sẽ tìm kiếm được nhanh chóng và dễ dàng hơn với solr

Solr cho phép bạn xây dựng một index với nhiều lĩnh vực, kiểu loại khác nhau. Ví dụ một tập dữ liệu về các món ăn như món âu, á món chiên, ... và solr đưa vào index thời gian hoàn thành món, hay số lượng nguyên liệu, ...

   Việc tìm kiếm thì sẽ thực hiện đi lại rất nhiều lần, nhưng index thì chỉ một lần duy nhất, và hiệu quả đem lại cho tìm kiếm với CSDL lớn thì vô cùng to lớn. Cùng với đó là Apache Sorl cho phép gọi và trả về API sẽ giúp nó kết hợp được với rất nhiều hệ thống.

 

* Chức năng 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

    - 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 chỉ để cập nhật được một tài liệu.

   - 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, …

 

* Tính chất:

   - Stopwors Stopwords là danh sách những từ vô nghĩa hoặc không giúp ích gì cho việc tìm kiếm và cần được loại bỏ khỏi index. Ví dụ trong tiếng Anh có các từ như: an, and, at, as if, for, but, by v.v

   - Stemming Stemming là việc giản lược các từ trở về dạng gốc của nó. Ví như trong tiếng anh write, wrote, written, writing đều có gốc là write.

   - Synonym Mỗi ngôn ngữ đều có một hệ thống từ đồng nghĩa và viết tắt riêng. Cho nên việc xử lý các vấn đề liên quan tới từ đồng nghĩa cũng rất quan trọng khi ta muốn mang lại kết quả tìm kiếm tốt nhất cho người dùng.

   - Protected words Solr hỗ trợ cấu hình loại bỏ các từ “bị cấm” khỏi index. Ví dụ đôi khi chúng ta cần loại bỏ tên người hay những từ khoá mang tính khiêu dâm đồi truỵ ra khỏi index chẳng hạn.

    - Compound word splitting Một số ngôn ngữ như tiếng Đức hay tiếng Phần Lan thường kết hợp các từ lại với nhau trở thành một từ mới mà không có khoản trắng ở giữa (ví dụ trong tiếng Phần thì bệnh viện của thành phố (city hospital) là kaupunginsairaala: gồm kaupungin nghĩa là của thành phốvà sairaala là bệnh viện, viết liền).

   - Spelling checking Và rõ ràng là việc kiểm tra lỗi chính tả thì phụ thuộc chặt chẽ vào các ngôn ngữ khác nhau. Trong Solr 4.4.0 có 3 component implementations của SpellChecker

   - org.apache.solr.spelling.IndexBasedSpellChecker Component này sẽ đưa ra các đề xuất dựa trên tần suất của các từ mà Solr đã index. Tức là dựa vào các từ cũ trong index để kiểm tra. org.apache.solr.spelling.FileBasedSpellChecker Bạn có thể chỉ định một file chứa các từ đúng, mỗi hàng một từ.

   - org.apache.solr.spelling.DirectSolrSpellChecker Thay vì phải tạo ra n-gram index cho từ cần kiểm tra và thực hiện câu truy vấn so sánh với index có sẵn, thì component này sẽ sử dụng thuật toán Levenshtein để kiểm tra trực tiếp với index sẵn có.

   - Facet navigation

   - Khả năng tuỳ chỉnh thứ tự xếp hạng của tài liệu (tunable scoring hay custom document ranking) Ứng dụng thực tế nhất của tính năng này có lẽ là quảng cáo (như sponsored search của Google) sửa dụng BoostQParserPlugin.

   - Khả năng mở rộng hệ thống (scalability)

   - Dễ tích hợp (Intergation) Do Solr được xây dựng dựa trên kiến trúc RESTful hỗ trợ kết quả trả về không chỉ ở dạng XML mà còn ở dưới dạng CSV hay JSON cho nên rất dễ dạng cho việc tích hợp với cách hệ thống sẵn có như Drupal và các ngôn ngữ và framework khác như Solr PHP client, Ruby on Rails (act_as_solr).

    - Sharding, Caching, Distributed search Solr hỗ trợ tìm kiếm phân tán trên các server khác nhau thông qua một tập hợp các tính năng được gọi là SolrCloud

    - Hỗ trợ Near real time search Tức là hỗ trợ index dữ liệu mới thêm vào gần như tức thời để có thể tìm kiếm.

 

* Cấu hình và cài đặt:

Để chạy thử Solr rất đơn giản, ta chỉ cần download Solr về giải nén và vào thư mục example chạy start.jar. 

Hiện tại thì bản Sorl mới nhất là 6.0.3 bạn có thể tải về tại đây

Cấu trúc sau khi giải nén:


Leave a Comment

Fields with * are required.