Thuật ngữ “Elasticsearch” thường được sử dụng để mô tả một công nghệ mạnh mẽ trong việc tìm kiếm và phân tích dữ liệu trên các nền tảng web và di động. Được biết đến với khả năng tích hợp linh hoạt và khả năng mở rộng, Elasticsearch đã nhanh chóng trở thành một công cụ quan trọng trong việc quản lý dữ liệu lớn và trích xuất thông tin quan trọng. Nếu bạn chưa có kiến thức về Elasticsearch, hãy dành thời gian để đọc bài viết này và tìm hiểu chi tiết về công nghệ này cũng như những lợi ích mà nó mang lại cho doanh nghiệp.
Elasticsearch là gì?
Elasticsearch là một công cụ tìm kiếm mã nguồn mở phổ biến, xuất hiện lần đầu vào năm 2010 dựa trên nền tảng Apache Lucene. Được thiết kế để đáp ứng nhu cầu lưu trữ mã nguồn mở, tìm kiếm và phân loại dữ liệu một cách chính xác, Elasticsearch đã nhanh chóng trở thành lựa chọn ưa thích của nhiều doanh nghiệp.
Với Elasticsearch, người dùng có khả năng thực hiện các thao tác tìm kiếm trên hàng triệu bản ghi chỉ trong vài giây. Sự linh hoạt này giúp nâng cao hiệu suất và tối ưu hóa trải nghiệm người dùng trong các ứng dụng doanh nghiệp. Điều này làm cho Elasticsearch trở thành một công cụ quan trọng đối với việc quản lý và truy xuất dữ liệu với hiệu suất cao.
Elasticsearch hoạt động như thế nào?
Khi khám phá về Elasticsearch, nhiều người quan tâm đến cách nó hoạt động. Elasticsearch đặt nền tảng hoạt động của mình trên nguyên lý “phân tán và cân bằng tải”. Đơn giản mà nói, dữ liệu được phân tán thành nhiều mảng (shard), và chúng được lưu trữ trên các nút trong cụm Elasticsearch.
Mỗi shard đóng vai trò như một đơn vị xử lý chuyên biệt, có khả năng thực hiện tìm kiếm độc lập, giúp cải thiện hiệu suất tìm kiếm dữ liệu. Đồng thời, Elasticsearch hỗ trợ khái niệm “replica”, thực hiện việc sao chép dữ liệu từ mảng gốc sang các mảng sao, giúp đảm bảo sẵn sàng và tăng độ tin cậy của hệ thống.
Lợi ích của Elasticsearch
Có thể thấy, Elasticsearch đã và đang thực hiện rất tốt nhiệm vụ của mình trong việc tạo nên sức hấp dẫn cho nhiều doanh nghiệp. Vậy lợi ích của Elasticsearch là gì?
- Dễ dàng triển khai với tốc độ chóng mặt: Elasticsearch cung cấp giao diện HTTP cùng REST đơn giản dựa trên các giao diện lập trình ứng dụng (API) và sử dụng định dạng trao đổi dữ liệu (JSON) không chứa schema. Điều này giúp người dùng tạo ra một ứng dụng có tốc độ triển khai nhanh chóng, vừa tiết kiệm thời gian lại có thể sử dụng linh hoạt trong nhiều trường hợp.
- Hoạt động hiệu quả trong thời gian thực: Elasticsearch chỉ cần 1 giây để đọc hoặc ghi lại tất tần tật những dữ liệu thông thường. Nếu doanh nghiệp mong muốn xây dựng một phần mềm phát triển hiệu quả trong thời gian thực thì Elasticsearch hoàn toàn đáp ứng tốt nhu cầu của bạn.
- Hiệu năng cao: Vì Elasticsearch hoạt động dựa trên nguyên tắc phân tán nên có thể xử lý cùng lúc một khối lượng công việc và dữ liệu lớn, rút ngắn thời gian tìm ra những kết quả phù hợp với các truy vấn của bạn.
- Phát triển ứng dụng tốt: Người dùng muốn phát triển một ứng dụng nào đó cần phải biết nhiều ngôn ngữ lập trình khác nhau. Tuy nhiên, với Elasticsearch, bạn sẽ được hỗ trợ sẵn tất cả những ngôn ngữ lập trình phổ biến như Java, Python, PHP, Node.js, Ruby,…
Các khái niệm cần biết
Một số khái niệm cần biết dưới đây sẽ giúp bạn hiểu hơn Elasticsearch là gì?
Node
Node là thuật ngữ dùng để nhắc đến trung tâm hoạt động của Elasticsearch. Đây là nơi thực hiện các chức năng như lưu trữ dữ liệu, tìm kiếm, đánh index. Mỗi node được định danh bằng 1 “unique name” và mặc định ngẫu nhiên khi thiết lập hoặc tự định danh.
Cluster
Một cluster có thể gồm 1 hoặc tập hợp các nodes hoạt động cùng nhau trên cùng 1 server. Custer được xác định bằng 1 “unique name” và chia sẻ cùng thuộc tính cluster.name. Thực tế, mỗi cluster sẽ có một node chính (master) và nó được lựa chọn một cách tự động và được thay thế nếu gặp sự cố.
Document
Document trong Elasticsearch là một đơn vị dữ liệu quen thuộc. Mỗi document đều thuộc một loại cụ thể, nằm trong một chỉ mục và được liên kết với một định danh duy nhất được gọi là UID. Quá trình đánh chỉ mục các document trong Elasticsearch sử dụng một phương pháp gọi là “inverted index”. Đây là một cách cơ bản để đánh chỉ mục dựa trên đơn vị từ, tạo ra mối liên kết giữa các từ và các document chứa từ đó.
Index
Trong Elasticsearch, inverted index là cấu trúc được thiết kế sẵn để cho phép tìm kiếm full-text search. Cách thức hoạt động của index khá đơn giản, các văn bản sẽ được phân chia thành từng từ có nghĩa và được map xem xét thuộc văn bản nào. Kết quả tìm kiếm sẽ tùy thuộc tùy thuộc vào loại search.
Shard
Shard vừa là đối tượng của phần mềm Lucene, vừa là tập hợp con các documents của 1 Index. Theo quy định, trong một Index thường được chia thành nhiều shard. Trong Elasticsearch, Shard là đối tượng nhỏ nhất, hoạt động ở mức thấp nhất và thực hiện chức năng lưu trữ dữ liệu. Shard được chia thành 2 loại chính là primary shard và replica shard.
Primary Shard
Primary Shard là địa điểm lưu trữ dữ liệu và đánh index. Sau đó, dữ liệu sẽ được vận chuyển tới các Replica Shard. Mỗi index sẽ có 5 Primary shard và tương ứng với 5 Replica Shard đi kèm.
Replica Shard
Replica Shard thực hiện nhiệm vụ lưu trữ dữ liệu nhân bản của Primary Shard. Replica Shard phải đảm bảo tính toàn vẹn của dữ liệu trong trường hợp Primary Shard xảy ra sự cố, đồng thời tăng cường tốc độ tìm kiếm vì chúng ta có thể setup lượng Replica Shard nhiều hơn mặc định của ES.
Ưu điểm của ElasticSearch
ElasticSearch sở hữu nhiều ưu điểm vượt trội như sau:
- Tốc độ tìm kiếm dữ liệu nhanh chóng dựa trên nền tảng Apache Lucene và độ trễ trả dữ liệu rất ít, nếu có chỉ khoảng dưới một giây.
- Có khả năng phân tích được dữ liệu chính xác và mở rộng dữ liệu theo chiều ngang.
- Elasticsearch hỗ trợ tìm kiếm mờ (fuzzy), có nghĩa là người dùng được phép tìm kiếm ngay cả khi dữ liệu nhập không chính xác (sai chính tả, sai cú pháp, ngữ pháp,…) nhưng vẫn cho kết quả đúng.
- Hỗ trợ nhiều ngôn ngữ lập trình như PHP, Java, JavaScript, Python, .NET,…
- Nhờ có Elasticsearch mà quá trình thu thập dữ liệu trở nên đơn giản hơn nhiều. Ngoài ra, công nghệ Elasticsearch còn tạo ra các báo cáo cần thiết.
- Sự kết hợp giữa Elasticsearch cùng Logstash và Beat đã tạo ra nhiều tiện ích cho người dùng khi xử lý các dữ liệu trước lập chỉ mục dễ dàng.
Nhược điểm của ElasticSearch
Bên cạnh 6 điểm mạnh nêu trên, Elasticsearch vẫn còn tồn tại một số nhược điểm khiến cho lập trình viên không hài lòng, chẳng hạn như:
- Với mục đích tìm kiếm, Elasticsearch khi thực hiện những nhiệm vụ khác như Create, Read, Update, và Delete có phần “lép vế” hơn so với các database khác. Đó là lý do vì sao nhiều lập trình viên thường kết hợp Elasticsearch cùng với database khác thay vì sử dụng nó làm database chính.
- Người dùng cần cân nhắc khi sử dụng công cụ Elasticsearch vì nó không đảm bảo dữ liệu của bạn được toàn vẹn khi thực hiện các hoạt động như update, delete và insert.
- Trong trường hợp thay đổi nhiều bản ghi và nhận được báo cáo lỗi, logic về lập trình có thể bị sai và không tránh khỏi tình huống mất dữ liệu.
- Đối với những hệ thống thường xuyên cập nhật nội dung dữ liệu, Elasticsearch không phải là lựa chọn phù hợp vì nó sẽ gây ra sự tốn kém khi đánh index dữ liệu vào hệ thống.
Cài đặt ElasticSearch
Để cài đặt Elasticsearch thành công, bạn cần lưu ý một số yêu cầu và cách cài đặt sau đây:
Yêu cầu
Để cài đặt Elasticsearch một cách thành công, bạn cần đảm bảo máy tính của mình đã có phiên bản Java từ 8 trở lên và biến môi trường `JAVA_HOME` được thiết lập đúng. Việc này đặt ra yêu cầu cần cài đặt Java trước khi bắt đầu quá trình cài đặt Elasticsearch.
Để kiểm tra xem biến môi trường đã được cài đặt đúng hay chưa, bạn có thể sử dụng lệnh `echo $JAVA_HOME`. Nếu lệnh này trả về đường dẫn đến thư mục cài đặt Java, điều này có nghĩa là biến môi trường đã được thiết lập thành công, và bạn có thể tiếp tục quá trình cài đặt Elasticsearch một cách an tâm.
Cài đặt
Bạn có thể chọn 1 trong 2 cách sau để cài đặt Elasticsearch:
Cách 1: Cách cài Elasticsearch bằng APT Repository
- Bước 1: Cài apt-transport-https -> sudo apt-get install apt-transport-https
- Bước 2: Thực hiện lưu định nghĩa “repository” vào “/etc/apt/sources.list.d/elastic-6.x.list” (Lưu ý rằng “Repository” mặc định KHÔNG có Elasticsearch) -> echo “deb https://artifacts.elastic.co/packages/6.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
- Bước 3: Hoàn tất cài đặt Elasticsearch bằng câu lệnh -> sudo apt-get update && sudo apt-get install elasticsearch”.
Cách 2: Cách cài đặt Elasticsearch bằng gói .deb
Để cài đặt Elasticsearch bằng gói .deb, bạn hãy thực hiện các lệnh dưới đây:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.deb.sha512
shasum -a 512 -c elasticsearch-6.4.0.deb.sha512
sudo dpkg -i elasticsearch-6.4.0.deb
Done!
Chạy Elasticsearch như thế nào?
Sau khi cài đặt, công cụ Elasticsearch không tự động chạy mà nó cần được khởi động. Thao tác đơn giản nhất là khởi động theo cách thủ công. Bạn hãy thực hiện lệnh để chạy server elasticsearch$ sudo systemctl start elasticsearch.service -> $ sudo systemctl start elasticsearch.service
Như vậy là bạn đã hoàn tất cài đặt và có thể chạy Elasticsearch.
Cách sử dụng câu lệnh để truy xuất dữ liệu trên ElasticSearch
Cách truy xuất dữ liệu trên ElasticSearch là gì? Dưới đây là một số cách sử dụng câu lệnh dành cho bạn:
Câu lệnh liệt kê các index có trong ES: $ curl -X GET “localhost:9200/_cat/indices?v”
Câu lệnh tạo “document” của “index” (thêm member với các trường thuộc tính):
$ curl -X PUT http://localhost:9200/team/_mapping/member?{&”properties”= {&”id”= { “type”: “text” },&”name”= { “type”: “text” },&”email”= { “type”: “text” },&”age”= { “type”: “integer” },&”phone”= { “type”: “text” },&”image”= { “type”: “text” },&”technologies”= {“type” : “text” }&}&}
Câu lệnh kiểm tra tất cả lập chỉ mục đã khởi tạo: $ curl -X GET http://localhost:9200/team?pretty
Câu lệnh yêu cầu thêm hoặc sửa dữ liệu vào index trên (team): $ curl -X PUT http://localhost:9200/team/member/_bulk?{“create”= { “_id”: 1, “_type”: “member”}&{“id”= “5510ce4ee174054836ef3c5a”,”name”: “Vargas Rosa”,”email”: “[email protected]”,”age”: 25,”phone”: “+1 (807) 530–3567″,”image”: “http://api.randomuser.me/portraits/men/78.jpg”,”description”: “enim Lorem upidatat et nostrud ut irure qui qui nulla qui deserunt fugiat laborum elit”,”technologies”: “ios javascript python”}&{“create”= { “_id”: 2, “_type”: “member”}&{“id”= “5510ce4e24ecdab88fe18d06″,”name”: “Navarro Thornton”,”email”: “[email protected]”,”age”: 34,”phone”: “+1 (896) 579–3364″,”image”: “http://api.randomuser.me/portraits/men/59.jpg”,”description”: “sit enim velit cillum magna commodo tempor”,”technologies”: “swift erlang java”}&{“create”= { “_id”: 3, “_type”: “member”}&{“id”= “5510ce4e6e7bbdbc120c9a89″,”name”: “Francine Aguirre”,”email”: “[email protected]”,”age”: 30,”phone”: “+1 (963) 492–3402″,”image”: “http://api.randomuser.me/portraits/men/82.jpg”,”description”: “cu et sit ullamco tempor Lorem excepteur magna pariatur”,”technologies”: “javascript ionic ruby”}&{“create”= { “_id”: 4, “_type”: “member”}&{“id”= “5510ce4ebd2a509edd8c6b50″,”name”: “Krystal Simmons”,”email”: “[email protected]”,”age”: 40,”phone”: “+1 (857) 418–2040″,”image”: “http://api.randomuser.me/portraits/women/10.jpg”,”description”: “ea dolor ex proident eiusmod et ut irure esse”,”technologies”: “ruby c c”}
Câu lệnh hiển thị thông tin các dữ liệu trong document và của từng document sau khi đã thêm: $ curl -X GET http://localhost:9200/team/member/4?pretty
Câu lệnh tìm kiếm tất cả dữ liệu các document trong “index” sử dụng API Search: $ curl -X GET http://localhost:9200/_search?pretty=true
Câu lệnh tìm kiếm theo văn bản nhập ở tất cả các trường trong document: $ curl -X GET http://localhost:9200/_search?q=ruby
Câu lệnh xóa 1 lập chỉ mục: $ curl -X DELETE “localhost:9200/cuongquach-company”
Trong bài viết này, chúng tôi đã giới thiệu về Elasticsearch và hướng dẫn bạn qua các bước cài đặt nhanh chóng. Elasticsearch không chỉ là một hệ thống tìm kiếm mạnh mẽ mà còn là một công cụ giúp bạn dễ dàng khám phá và hiểu rõ dữ liệu. Sự linh hoạt mà Elasticsearch mang lại giúp doanh nghiệp tối ưu hóa quy trình ra quyết định và đạt được hiệu suất cao.