12/08/2018, 14:08

Tìm hiểu về Elasticsearch

I. ElasticSearch là gì? ElasticSearch là một công cụ tìm kiếm cấp doanh nghiệp (enterprise-level search engine). Mục tiêu của nó là tạo thành một công cụ, nền tảng kỹ thuật tìm kiếm và phân tích thời gian thực (ở đây là nhanh trong và chính xác), cũng như cách để nó có thể áp dụng hay triển khai ...

I. ElasticSearch là gì?

ElasticSearch là một công cụ tìm kiếm cấp doanh nghiệp (enterprise-level search engine). Mục tiêu của nó là tạo thành một công cụ, nền tảng kỹ thuật tìm kiếm và phân tích thời gian thực (ở đây là nhanh trong và chính xác), cũng như cách để nó có thể áp dụng hay triển khai một cách dễ dàng vào các nguồn dữ liệu (data sourcecs) khác nhau.

Nguồn dữ liệu nói trên bao gồm các cơ sở dữ liệu nổi tiếng như MS SQL, MySQL, PostgreSQL ... mà nó có thể là văn bản(text), thư điện tử(email), pdf ... nói chung là tất cả những thứ có liên quan tới dữ liệu có văn bản.

ElastichSearch được phát triển bởi Shay Banon và dựa trên Apache Lucene, ElasticSearch là một bản phân phối mã nguồn mở cho việc tìm kiếm dữ liệu trên máy chủ. Đây là một giải pháp mở rộng. hỗi trợ tìm kiếm thời gian thực mà không cần có một cấu hình. Nó đã được áp dụng bời một số công ty bao gồm cả StumbleUpon và Mozilla.

II. Một số thông tin về ElasticSearch.

  • Elasticsearch là một search engine.
  • Elasticsearch được xây dựng để hoạt động như một server cloud theo cơ chế của RESTful.
  • Kế thừa và phát triển từ Lucene Apache.
  • Phát triển bằng ngôn ngữ java.
  • Là phần mềm open-source được phát hành theo giất phép của Apache License.
  • Tương tự như Solr (Apache)
  • ELASTIC-SEARCH có thể tích hợp được với tất cả các ứng dụng sử dụng các loại ngôn ngữ sau.
    • java
    • javascipt
    • Groovy
    • .NET
    • PHP
    • Perl
    • Python
    • Ruby
  • Những ai đã dùng ElasticSearch
    • Mozilla
    • Quora
    • SoundCloud
    • GitHub
    • Stack Exchange
    • Center for Open Science
    • Reverb
    • Netflix

III. Cách thức hoạt động

Chắc các bạn hẳn sẽ để ý tới từ "real time" thời gian thực mà tôi thường hay nói tới ở phía trên, đây cũng là tiêu chí phát triển của của Elasticsearch, sở dĩ Elasticsearch được gọi là "search & analyze in real time" là vì nó có khả năng trả về kết quả tìm kiếm một cách nhanh chóng và chính xác trong một nguồn dữ liệu lớn (big data source).

Vậy nó làm như thế nào? Để giải thích điều này ta quay trở về nguồn dữ liệu (data source) mà tôi đã nói ở trên nó không chỉ bao gồm các nguồn lưu trữ cơ sở dữ liệu nổi tiếng như MySQL, MS SQL, PostgreSQL, mà nó có thể là văn bản (text), pdf, doc,...

Theo như cách thông thường tìm kiếm trong cơ sở dữ liệu database đều biết thì có hai cách là.

  • Lật từng trang để tìm kiếm.(No index)
  • Lật tới phần mục lục để tìm kiếm.

Về cơ bản thì ElasticSearch cũng áp dụng giải pháp giống index,Tuy nhiên về mặt cơ chế xử lý và tìm kiếm thì có sự khác biệt, Index trong ElasticSearch được gọi là inverted index.

IV. Inverted Index là gì?

kỹ thuật thay vì index theo từng đơn vị row(document) giống như mysql thì chúng ta sẽ biến thành index theo đơn vị term. Cụ thể hơn, Inverted index là một cấu trúc dữ liệu, nhằm mục đích map giữa term và các document chứa term đó.

Ta sẽ xém xét ví dụ sau để hiểu rõ hơn về inverted index.

Ta có 3 document là D1, D2, D3

D1 = "hom nay troi mua"

D2 = "hom nay troi nang"

D3 = "mot ngay dep troi"

Theo đó ta sẽ có inverted index của 3 document trên là

"hom" = {D1, D2}

"nay" = {D1, D2}

"troi" = {D1, D2, D3}

"mua" = {D1}

"nang" = {D2}

"mot" = {D3}

"ngay" = {D3}

"dep" = {D3}

Nhìn vào kết quả của inverted index trên ta có thể thấy việc search full text sẽ diễn ra rất dễ dàng và nhanh chóng. nó chỉ là việc tính toán của các term. Ví dụ khi muốn query từ “hom nay” (tùy theo việc là query theo kiểu and hay or thì phép tính toán sẽ khác đi. ở đây mình sẽ lấy ví dụ là query theo kiểu and.) thì phép toán là

{D1, D2} ∩ {D1, D2} = {D1, D2}

Kết quả thu được chính là document 1 và 2 (D1 and D2).

Qua ví dụ trên các bạn đã hiểu cơ bản về inverted index.

Phần cài đặt trên ubuntu và sử dụng elasticsearch với rails tôi xin được giới thiệu ở phần tiếp theo.

0