Thuật ngữ Elasticsearch dùng để nhắc đến một công nghệ tìm kiếm và phân tích dữ liệu mạnh mẽ trên các ứng dụng web và di động. Với khả năng tích hợp linh hoạt và mở rộng, Elasticsearch đã nhanh chóng trở thành công cụ hữu ích cho 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 từng nghe đến tên gọi này, hãy dừng chân ở bài viết hôm nay để cùng
Mona Media tìm hiểu chi tiết hơn về
Elasticsearch là gì và lợi ích mà nó mang lại cho doanh nghiệp.
Elasticsearch là gì?
Elasticsearch là gì? Đây một công cụ tìm kiếm mã nguồn mở phổ biến được ra mắt từ năm 2010 dựa trên nền tảng Apache Lucene. Elasticsearch cho phép người dùng thực hiện hàng loạt các thao tác như lưu trữ mã nguồn mở, tìm kiếm và phân loại dữ liệu chính xác.
Ngày nay, công cụ Elasticsearch được rất nhiều doanh nghiệp yêu thích vì chỉ cần vài giây, người dùng có thể tìm kiếm hàng triệu bản ghi. Từ đó nâng cao hiệu suất và cải thiện trải nghiệm người dùng đối với ứng dụng mà doanh nghiệp cung cấp.
Elasticsearch hoạt động như thế nào?
Khi tìm hiểu Elasticsearch là gì thì nhiều người cũng cần được giải đáp về cách thức hoạt động của nó. Elasticsearch hoạt động theo nguyên tắc “phân tán và cân bằng tải“. Hiểu một cách đơn giản, dữ liệu sẽ phân tán thành nhiều mảng (shard) và chúng được lưu trữ trên các nút của cụm Elasticsearch.
Mỗi shard là một đơn vị xử lý chuyên nghiệp, có vai trò tìm kiếm độc lập và cải thiện hiệu suất khi tìm kiếm dữ liệu. Ngoài ra, Elasticsearch còn hỗ trợ khái niệm “replica”, thực hiện quá trình sao chép dữ liệu từ mảng gốc sang các mảng sao, nhờ đó đảm bảo tính sẵn sàng và tăng độ tin cậy hơn.
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 là đơn vị dữ liệu quen thuộc trong Elasticsearch. Mỗi document thuộc một type, nằm trong một chỉ mục và được liên kết với một định danh duy nhất, gọi là UID. Để đánh chỉ mục cho các document, Elasticsearch sẽ sử dụng cách đánh “inverted index”. Đây là cách đánh chỉ mục cơ bản dựa trên đơn vị từ để tạo 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ông cụ Elasticsearch yêu cầu ngôn ngữ lập trình Java tối thiểu từ phiên bản 8 trở lên và được thiết lập biến môi trường JAVA_HOME. Do đó, bạn phải đảm bảo rằng đã cài thành công phiên bản Java >= 8 trên máy trước khi cài đặt Elasticsearch. Muốn kiểm tra biến môi trường đã được thiết lập thành công chưa, bạn hãy thực hiện lệnh echo $JAVA_HOME.
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”
Bài viết trên đây chúng tôi đã chia sẻ đến bạn khái niệm
Elasticsearch là gì và các bước cài đặt nhanh chóng. Với Elasticsearch, việc khám phá và hiểu rõ dữ liệu trở nên dễ dàng hơn bao giờ hết, từ đó giúp doanh nghiệp có sự linh hoạt và đạt hiệu quả cao trong quá trình đưa ra quyết định của mình.
Xem thêm: