Elasticsearch là gì? Cách sử dụng Elasticsearch

2187
15-10-2018
Elasticsearch là gì? Cách sử dụng Elasticsearch

Tìm kiếm và Phân tích là những tính năng chính của các ứng dụng phần mềm hiện đại. Khả năng mở rộng và khả năng xử lý khối lượng lớn dữ liệu trong thời gian gần thực là điều bắt buộc đối với nhiều ứng dụng như ứng dụng di động, web và ứng dụng phân tích dữ liệu.

Ngày nay, tính năng tự động hoàn thành trong các trường tìm kiếm, đề xuất tìm kiếm, tìm kiếm vị trí và điều hướng theo khía cạnh thực tế là các tiêu chuẩn về khả năng sử dụng. Đây là lúc Elasticsearch xuất hiện để giải quyết bài toán này. Elasticsearch là một trong những hệ thống cơ sở dữ liệu phổ biến nhất hiện nay. Hãy cùng Bizfly Cloud tìm hiểu chi tiết hơn về khái niệm này qua bài viết dưới đây nhé!

Elasticsearch là gì?

Theo Wikipedia Elasticsearch là một công cụ tìm kiếm dựa trên Lucene. Nó cung cấp một công cụ tìm kiếm toàn diện có khả năng phân tán, đa nhiệm với HTTP web interface và schema-free JSON documents.

Nói cách khác, Elasticsearch là một database server mã nguồn mở, độc lập được phát triển trong Java. Về cơ bản, nó được sử dụng để tìm kiếm và phân tích văn bản (full-text-search). Nó lấy dữ liệu không cấu trúc từ nhiều nguồn khác nhau và lưu trữ nó ở định dạng phức tạp được tối ưu hóa cao cho các tìm kiếm dựa trên ngôn ngữ.

Như đã đề cập ở trên, Elasticsearch sử dụng Apache Lucene để indexing và searching. Do đó, Lucene chỉ là một thư viện và để làm việc được với nó sẽ là một quá trình rất phức tạp. Tuy nhiên, Elasticsearch đã khắc phục các khó khăn đó bằng cách ẩn tất cả những thao tác phức tạp bằng cách cung cấp quyền truy cập vào API. API đi kèm dưới dạng một API RESTful HTTP sử dụng JSON làm định dạng trao đổi dữ liệu. Sử dụng Elasticsearch bạn có thể lưu trữ, tìm kiếm và phân tích khối lượng lớn dữ liệu một cách nhanh chóng và hiệu quả. Nó đặc biệt hữu ích trong khi xử lý dữ liệu bán cấu trúc tức là ngôn ngữ tự nhiên.

Elasticsearch là một database server mã nguồn mở, độc lập được phát triển trong Java

Elasticsearch là một database server mã nguồn mở, độc lập được phát triển trong Java

Elasticsearch phát triển như thế nào?

Elasticsearch là một sản phẩm của công ty có tên là Elastic, được thành lập vào năm 2012. ElasticSearch là một trong những sản phẩm nguồn mở lớn cùng với Logstash, Kibana và Beats. Elastic cung cấp một số sản phẩm thương mại khác như Marvel, Shield, Watcher, Found,...

Vào năm 2004, Shay Banon đã tạo ra Compass, được coi là tiền thân của Elasticsearch. Quá trình phát triển của Elasticsearch được mô tả trong dòng thời gian sau:

ElasticSearch là một trong những sản phẩm nguồn mở lớn cùng với Logstash, Kibana và Beats

ElasticSearch là một trong những sản phẩm nguồn mở lớn cùng với Logstash, Kibana và Beats

Ưu điểm của Elasticsearch

1. Khả năng mở rộng

Elasticsearch rất dễ mở rộng và đáng tin cậy. Đây là một tính năng rất quan trọng giúp đơn giản hóa các kiến trúc phức tạp và tiết kiệm thời gian trong quá trình thực hiện các dự án.

2. Tốc độ

Elasticsearch sử dụng distributed inverted indices để tìm các kết quả phù hợp nhất cho full-text searches giúp việc tìm kiếm từ các tập dữ liệu rất lớn trở nên vô cùng nhanh chóng.

3. Dễ dàng sử dụng API

Elasticsearch cung cấp các API RESTful đơn giản và sử dụng các schema-free JSON documents giúp việc indexing, searching, và querying thật dễ dàng.

4. Đa ngôn ngữ

Một trong những tính năng khác biệt nhất mà Elasticsearch sở hữu đó chính là đa ngôn ngữ. Nó hỗ trợ nhiều tài liệu được viết bằng các ngôn ngữ khác nhau như tiếng Ả Rập, tiếng Braxin, tiếng Trung, tiếng Anh, tiếng Pháp, tiếng Hindi, tiếng Hàn,...

5. Theo định hướng tài liệu (Document-Oriented)

Elasticsearch lưu trữ các thực thể phức tạp trong thế giới thực dưới dạng các structured JSON documents và lập chỉ mục tất cả các trường theo mặc định giúp cho dữ liệu luôn có thể tìm kiếm được. Vì không có hàng và cột dữ liệu, bạn có thể thực hiện full-text search phức tạp một rất cách dễ dàng.

6. Tự động hoàn thành (autocompletion)

Elasticsearch cung cấp chức năng tự động hoàn thành. Bằng cách dự đoán từ bằng cách sử dụng rất ít ký tự, autocompletion sẽ tăng tốc độ tương tác giữa con người và máy tính.

7. Schema-Free

Elasticsearch là schema-free vì nó chấp nhận các tài liệu JSON. Nó cố gắng phát hiện cấu trúc dữ liệu, lập chỉ mục dữ liệu, làm cho dữ liệu có thể tìm kiếm được.

Elasticsearch hoạt động như thế nào?

Elasticsearch hoạt động bằng cách truy xuất và quản lý dữ liệu dạng document-oriented và bán cấu trúc. Nguyên tắc cơ bản về cách Elasticsearch hoạt động là kiến trúc "shared nothing". Cấu trúc dữ liệu chính mà Elasticsearch sử dụng là một inverted index được quản lý bằng cách sử dụng các API của Apache Lucene.

Nói một cách đơn giản, inverted index là mapping của mỗi một unique token với danh sách các document (vị trí) có chứa từ đó, giúp bạn có thể xác định vị trí các document với các từ khóa đã cho rất nhanh. Thông tin index được lưu trữ trong một hoặc nhiều phân vùng còn được gọi là shard (phân đoạn). Elasticsearch có thể phân phối và phân bổ các shard cho các node trong một cluster cũng như replicate chúng.

Cơ chế này làm cho việc phân phối dữ liệu được linh hoạt. Chúng ta có thể tạo Redundancy bằng cách phân phối các replica shard ('bản sao' của các phân đoạn chính) cho các node khác nhau. Các thao tác index sử dụng primary shard (phân đoạn chính) và truy vấn tìm kiếm sử dụng cả hai loại phân đoạn. Có nhiều node và replica sẽ làm tăng hiệu suất truy vấn.

Cách cài đặt Elasticsearch

Cách cài đặt Elasticsearch

Bước 1 - Cài đặt phiên bản Java mới nhất hoặc nếu bạn đã cài đặt Java rồi kiểm tra phiên bản của nó bằng cách sử dụng lệnh java–version trong cmd.

Lưu ý: Phiên bản Java từ 7 trở lên.

Elasticsearch là gì? Tìm hiểu cách sử dụng Elasticsearch

Bước 2 - Truy cập https://www.elastic.co/downloads.

Tìm hiểu về Elasticsearch

Bước 3 - Nhấp vào Tải xuống để nhận tệp zip.
Bước 4 - Khi tệp được tải xuống, giải nén nội dung.
Bước 5 - Đến elasticsearch-x.y.z> bin.

Những thông tin về Elasticsearch

Bước 6 - Bên trong thư mục bin, tìm tập tin elasticsearch.bat và click đúp để khởi động máy chủ Elasticsearch.

Khởi động máy chủ Elasticsearch

Bước 7 - Đợi máy chủ khởi động.

Cách khởi động máy chủ Elasticsearch

Bước 8 - Mở trình duyệt và gõ localhost: 9200 để kiểm tra xem máy chủ có đang chạy hay không.

Tìm hiểu về cách khởi động máy chủ Elasticsearch

Bước 9 - Nếu bạn thấy thông báo được hiển thị trên trên trình duyệt, có nghĩa là các cài đặt đang thành công.
Bước 10 - Điều cuối cùng bạn cần làm là thêm plugin Sense (beta) sẽ hoạt động như một developers interface cho Elasticsearch.

Một số thông tin về Elasticsearch

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

Trước khi đi sâu hơn vào Elasticsearch, có vài khái niệm mà bạn cần phải hiểu sau đây.

1. Near Real-Time (Gần thời gian thực)

Elasticsearch là một real-time search platform có nghĩa là nó có thể thường xuyên lên lịch cho một trạng thái mới của các tài liệu tìm kiếm được. Theo mặc định các trạng thái sẽ được làm mới theo giây. Do đó, sẽ tồn tại một độ trễ nhỏ cho đến khi tài liệu trở nên có thể tìm kiếm được, từ lúc bạn lập index.

2. Index

Index là tập hợp các tài liệu có đặc điểm tương tự. Nó lưu trữ dữ liệu trong một hoặc nhiều indices bằng cách sử dụng các phép so sánh SQL, được sử dụng để lưu trữ và đọc các tài liệu. Trong Elasticsearch, một index được xác định bởi một tên duy nhất và phải là chữ thường. Tên này sẽ được sử dụng để chỉ một index cụ thể khi thực hiện các hoạt động khác nhau trên các tài liệu. Trong một single cluster có thể có n indexes.

3. Document

Trong Elasticsearch, một document là một đơn vị thông tin cơ bản mà chúng ta có thể lập index. Các tài liệu này bao gồm các trường khác nhau và mỗi trường trong số các trường này được xác định theo tê, và có thể chứa một hoặc nhiều giá trị. Các tài liệu này đều là schema free và có thể có một nhóm trường khác. Tài liệu này là một JSON (JavaScript Object Notation). Trong một index có thể lưu trữ được n tài liệu.

4. Type

Trong Elasticsearch, type được định nghĩa cho các tài liệu có một tập các trường chung. Nó là một logical category/ partition của một index có ngữ nghĩa học hoàn toàn tùy thuộc vào người dùng. Bạn cũng có thể xác định nhiều type trong một index.

5. Node

Một node là một single instance của Elasticsearch server lưu trữ dữ liệu. Node tham gia vào cluster's indexing và searching capabilities. Một node được xác định bằng tên. Theo mặc định, một IDentifier ngẫu nhiên duy nhất (UUID) được gán cho node khi khởi động. Tên này được sử dụng cho mục đích quản trị. Bạn có thể xác định máy chủ nào trong mạng của bạn tương ứng với các node nào trong cụm Elasticsearch bằng cách sử dụng các tên này.

6. Cluster

Cluster là một tập hợp của một hoặc nhiều node Elasticsearch (máy chủ) hoạt động cùng nhau. Nó chứa toàn bộ dữ liệu và cung cấp khả năng index và search dễ dàng trên tất cả các node, cho phép xử lý dễ dàng một khối lượng dữ liệu quá lớn so với khả năng xử lý của một node duy nhất. Giống như một node, một cluster cũng được xác định bằng một tên duy nhất. Theo mặc định, tên đó luôn là "elasticsearch". Một node chỉ có thể là một phần của một cluster nếu node được thiết lập để nối cluster bằng tên của nó và đó là lý do tại sao tên của cluster là rất quan trọng.

7. Shards

Sử dụng một cluster, bạn có thể lưu trữ khối lượng lớn thông tin vượt quá khả năng của một single server. Để giải quyết vấn đề này, Elasticsearch cho phép bạn chia nhỏ chỉ mục của mình thành nhiều phần được gọi là phân đoạn. Số lượng mảnh cần thiết có thể được xác định trong khi tạo chỉ mục. Mỗi phân đoạn là một "index" độc lập và đầy đủ chức năng có thể được lưu trữ trên bất kỳ node nào trong cluster.

8. Replicas

Để tránh các sự cố ngẫu nhiên (chẳng hạn như một shard hoặc node bị offline vì lý do nào đó), bạn luôn cần phải có một cơ chế chuyển đổi dự phòng (failover mechanism). Vì vậy, như một giải pháp, Elasticsearch cung cấp replicas. Replicas chỉ là một bản sao bổ sung của shard và có thể được sử dụng cho các truy vấn giống như bản gốc.

Các quy ước API

Các API REST Elasticsearch được truy cập bằng cách sử dụng JSON qua HTTP. Elasticsearch sử dụng các quy ước sau trong suốt API REST.

1. Multiple Indices

Nói chung, các hoạt động trong API dành cho nhiều chỉ mục. Điều này giúp người dùng thực hiện các hoạt động khác nhau thông qua toàn bộ API bằng cách thực hiện truy vấn liên quan một lần duy nhất. Một số ký hiệu được sử dụng cho các truy vấn này là:

  • Ký hiệu phân tách bằng dấu phẩy (demo1, demo2, demo3)
  • Ký tự đại diện (demo *, de * o2, demo3, -demo3)
  • _all từ khóa cho tất cả các chỉ mục
  • Tham số chuỗi truy vấn URL (ignore_unavailable, allow_no_indices, expand_wildcards)

2. Date Math Support trong Index Name

Bạn có thể tìm kiếm một loạt các time-series indices bằng cách sử dụng date math index name resolution. Loại tìm kiếm này giới hạn số index đang được tìm kiếm, do đó giảm tải trên cluster và cải thiện hiệu suất thực hiện. Bạn cần chỉ định ngày và giờ theo định dạng cụ thể như:

<static_name{date_math_expr{date_format|time_zone}}>

static_name: Đại diện cho phần văn bản tĩnh của tên.

date_math_expr: Đạ diện cho một dynamic date math.

date_format: Biểu diễn định dạng tùy chọn trong đó ngày được tính toán sẽ được hiển thị.

time_zone: Đại diện cho múi giờ tùy chọn.
3. Các tùy chọn phổ biến

Một số tùy chọn phổ biến là:

  • Pretty Result
  • Human Readable Output
  • Date Math
  • Response Filtering
  • Flat Settings
  • Parameter
  • No Values
  • Time Units
  • Byte Size Units
  • Unit-less quantities
  • Distance Units
  • Fuzziness
  • Enabling Stack Traces
  • Request Body In Query String

4. Kiểm soát truy cập dựa trên URL

Người dùng cũng có thể sử dụng proxy có quyền kiểm soát truy cập dựa trên URL để bảo mật quyền truy cập vào chỉ mục Elasticsearch. Elasticsearch cung cấp tùy chọn chỉ định chỉ mục trong URL và trên từng yêu cầu riêng lẻ trong nội dung yêu cầu đối với một số yêu cầu như:

  • multi-search
  • multi-get
  • bulk

Nguồn: Bizfly Cloud chia sẻ

>> Có thể bạn quan tâm: Server - Máy chủ là gì? Có mấy loại server? Lựa chọn server như thế nào?

SHARE