Elastic Search là gì? Tìm hiểu về Elastic Search

Nguyễn Duy Nam
5 min readApr 19, 2022

--

Trong thế giới công nghệ ngày nay, một lượng lớn dữ liệu định xấp xỉ 2,5 nghìn tỷ byte được tạo ra mỗi ngày. Dữ liệu này chủ yếu đến từ các nguồn khác nhau: từ các trang social media sites, trang video sharing, cho đến các tổ chức quy mô trung bình đến khổng lồ. Toàn bộ các dữ liệu này được gọi là data ocean hoặc Big Data. Phần lớn khi các dữ liệu này đứng riêng một mình mà không hề có sự thống kê hay phân tích nào, chúng sẽ trở nên vô nghĩa, đồng thời không có chút giá trị nghiên cứu nào cả. Để làm cho các dữ liệu này trở nên ý nghĩa, bạn cần có các công cụ phục vụ cho việc phân tích. Có rất nhiều công cụ phân tích sẵn có trên thị trường giúp bạn có thể khám phá, ghi lại, truy cập, phân tích và xử lý các dữ liệu phi cấu trúc này. Elasticsearch là một trong những công cụ nổi bật nhất.

Elastic Search là gì? (ES)

  • ElasticSearch là một search engine
  • Elasticsearchđược kế thừa từ Lucene Apache
  • Elasticsearch thực chất hoặt động như 1 web server, có khả năng tìm kiếm nhanh chóng (near realtime) thông qua giao thức RESTful
  • Elasticsearch có khả năng phân tích và thống kê dữ liệu
  • Elasticsearch chạy trên server riêng và đồng thời giao tiếp thông qua RESTful do vậy nên nó không phụ thuộc vào client viết bằng gì hay hệ thống hiện tại của bạn viết bằng gì. Nên việc tích hợp nó vào hệ thống bạn là dễ dàng, bạn chỉ cần gửi request http lên là nó trả về kết quả.
  • Elasticsearch là 1 hệ thống phân tán và có khả năng mở rộng tuyệt vời (horizontal scalability). Lắp thêm node cho nó là nó tự động auto mở rộng.
  • Elasticsearch là 1 open source được phát triển bằng Java

Các khái niệm cơ bản của Elastic Search

1. Document trong Elastic Search là gì?

Document là một JSON object với một số dữ liệu. Đây là basic information unit trong ES. Hiểu 1 cách cơ bản thì đây là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch.

2. Index

Trong Elasticsearch , sử dụng một cấu trúc được gọi là inverted index . Nó được thiết kế để cho phép tìm kiếm full-text search. Cách thức của nó khá đơn giản, các văn bản được phân tách ra thành từng từ có nghĩa sau đó sẽ đk map xem thuộc văn bản nào. Khi search tùy thuộc vào loại search sẽ đưa ra kết quả cụ thể.

VÍ dụ : Ta có 2 văn bản cụ thể như sau :

1,The quick brown fox jumped over the lazy dog
2,Quick brown foxes leap over lazy dogs in summer

Để tạo ra một inverted index, trước hết chúng ta sẽ phân chia nội dung của từng tài liệu thành các từ riêng biệt (gọi là terms), tạo một danh sách được sắp xếp của tất cả terms duy nhất, sau đó liệt kê tài liệu nào mà mỗi thuật ngữ xuất hiện. Kết quả như sau:

Term      Doc_1  Doc_2
-------------------------
Quick | | X
The | X |
brown | X | X
dog | X |
dogs | | X
fox | X |
foxes | | X
in | | X
jumped | X |
lazy | X | X
leap | | X
over | X | X
quick | X |
summer | | X
the | X |
------------------------

Bây giờ, nếu chúng ta muốn tìm kiếm quick brown, chúng ta chỉ cần tìm trong các tài liệu trong đó mỗi thuật ngữ có xuất xuất hiện hay không. Kết quả như sau:

Term      Doc_1  Doc_2
-------------------------
brown | X | X
quick | X |
------------------------
Total | 2 | 1

Như các bạn đã thấy, cả 2 đoạn văn bản đều thích hợp với từ khóa. Tuy nhiên có thể dễ dàng nhận ra rằng Doc_1 chính xác hơn nhiều.

3. Shard

  • Shard là đối tượng của Lucene , là tập con các documents của 1 Index. Một Index có thể được chia thành nhiều shard.
  • Mỗi node bao gồm nhiều Shard . Chính vì thế Shard mà là đối tượng nhỏ nhất, hoạt động ở mức thấp nhất, đóng vai trò lưu trữ dữ liệu.
  • Chúng ta gần như không bao giờ làm việc trực tiếp với các Shard Elasticsearch đã support toàn bộ việc giao tiếp cũng như tự động thay đổi các Shard khi cần thiết.
  • Có 2 loại Shard là : primary shardreplica shard.

4. Node

  • Là trung tâm hoạt động của Elasticsearch. Là nơi lưu trữ dữ liễu ,tham gia thực hiện đánh index cúa cluster cũng như thực hiện các thao tác tìm kiếm
  • Mỗi node được định danh bằng 1 unique name

5. Cluster

  • Tập hợp các nodes hoạt động cùng với nhau, chia sẽ cùng thuộc tính cluster.name. Chính vì thế cluster sẽ được xác định bằng 1 ‘unique name’. Việc định danh các cluster trùng tên sẽ gây nên lỗi cho các node vì vậy khi setup các bạn cần hết sức chú ý điểm này
  • Mỗi cluster có một node chính (master), được lựa chọn một cách tự động và có thể thay thế nếu sự cố xảy ra. Một cluster có thể gồm 1 hoặc nhiều nodes. Các nodes có thể hoạt động trên cùng 1 server .
  • Tuy nhiên trong thực tế , một cluster sẽ gồm nhiều nodes hoạt động trên các server khác nhau để đảm bảo nếu 1 server gặp sự cố thì server khác (node khác) có thể hoạt động đầy đủ chức năng so với khi có 2 servers. Các node có thể tìm thấy nhau để hoạt động trên cùng 1 cluster qua giao thức unicast.

Chức năng chính của Cluster đó chính là quyết định xem shards nào được phân bổ cho node nào và khi nào thì di chuyển các Cluster để cân bằng lại Cluster

Lời kết.

Trong blog này, ta đã thảo luận Elastic Search là gì? Tìm hiểu về Elastic Search. Tôi hy vọng tất cả các bạn sẽ hiểu cơ bản về Elastic Search.

— — —

Cảm ơn vì đã đọc!

Link tài liệu tham khảo : https://topdev.vn/blog/elasticsearch-la-gi/

--

--