- vừa được xem lúc

Tìm hiểu và cài đặt Elasticsearch

0 0 100

Người đăng: Pham Hong Son

Theo Viblo Asia

Elasticsearch là gì?

Elasticsearch là một NoSQL database, một search engine phân tán, dựa trên phần mềm Lucene. Elasticsearch có nhiều công cụ với giao diện web HTTP và hỗ trợ dữ liệu JSON. Elasticsearch là một công cụ tìm kiếm phổ biến nhất hiện nay.

Elasticsearch cung cấp công cụ tìm tiếm và phân tích gần như là thời gian thực, áp dụng với mọi kiểu dữ liệu - văn bản có cấu trúc hoặc phi cấu trúc, số, thông tin địa lý... Elasticsearch sẽ tự lưu trữ và đánh chỉ mục chúng để tìm kiếm hiệu quả. Vì Elasticsearch là một search engine phân tán nên bạn có thể dễ dàng mở rộng khi dữ liệu mở rộng.

Ưu điểm và nhược điểm

1. Ưu điểm

  • Tốc độ tìm kiếm của Elasticsearch rất nhanh chóng và linh hoạt (đúng như tên gọi)
  • Elasticsearch có thể chạy trên mọi nền tảng nhờ vào máy ảo Java và dễ dàng mở rộng
  • Elasticsearch là công cụ tìm kiếm near realtime, dữ liệu nhanh chóng có thể tìm kiếm được sau khi thêm vào hệ thống
  • Dễ dàng backup toàn bộ hệ thống
  • Hỗ trợ nhiều loại dữ liệu
  • Opensource

2. Nhược điểm

  • Vấn đề split-brain khi kết nối của các node với master có vấn đề
  • Elasticsearch là một NoSQL, nó không hỗ trợ database transaction
  • Ngoài việc search thì hiệu suất của các thao tác khác đối với dữ liệu của Elasticsearch không thực sự tốt, có thể mất mát dữ liệu đối với luồng dữ liệu lớn
  • Vì Elasticsearh sẽ đánh index cho các dữ liệu được thêm vào nên nó không phù hợp với hệ thống cập nhật dữ liệu thường xuyên

Ứng dụng

1. Database

Elasticsearch là một NoSQL database, vì thế chúng ta hoàn toàn có thể sử dụng nó như một database. Nó có đầy đủ các chức năng CRUD cơ bản cần thiết để làm một database.

Nhưng như những nhược điểm đã nêu ở phần trên, Elasticsearch có thể sử dụng được với những usecase hệ thống nhỏ. Nhưng đối với những hệ thống lớn, dữ liệu được cập nhật thường xuyên và luồng dữ liệu hàng lớn, Elasticsearch hoàn toàn không phù hợp.

2. Search engine

Đây chính là mục đích mà nó được tạo ra, Elasticsearch được sử dụng phổ biến như là một công cụ tìm kiếm.

  • Logging and Log Analysis: Elasticsearch là một platform phổ biến nhất cho logging. Elasticsearch giúp bạn không phải căng mắt tìm kiếm trong hàng ngìn dòng log trên nhiều hệ thống khác nhau.
  • Tìm kiếm văn bản: Elasticsearch có thể được dùng để tìm kiếm văn bản thuần túy với cụm từ được cung cấp chính xác nhất. Rất nhiều tên tuổi lớn đang sử dụng công cụ tìm kiếm này, có thể kể đến như Microsoft, Github, Wikipedia, Facebook, Linkedin, Stackoverflow, Viblo...
  • Tìm kiếm sản phẩm: Chúng ta có thể sử dụng Elasticsearch để tìm kiếm các sản phẩm trong hệ thống theo tên hoặc theo các trường dữ liệu bất kỳ khác vì Elasticsearch hỗ trợ rất nhiều kiểu dữ liệu có cấu trúc.
  • AutoComplete: Vì thời gian tìm kiếm của Elasticsearch rất nhanh nên chúng ta có thể tích hợp nó như một công cụ gợi ý autocomplete, tăng độ trải nhiệm của người dùng.

Thao tác sử dụng cơ bản

1.Cài đặt

Bạn có thể cài đặt Elasticsearch cùng với Kibanna (Giao diện quản lý cho Elasticsearch) rất dễ dàng với Docker

// Elasticsearch
$ docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.1
$ docker run --name kibana --net elasticnet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.12.1
// Kibana
$ docker pull docker.elastic.co/kibana/kibana:7.12.1
$ docker run -d --name kibana --net elasticnet -p 5601:5601 docker.elastic.co/kibana/kibana:

Hoặc sử dụng Docker-compose

version: '2.2'
services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1 container_name: es01 environment: - node.name=es01 - cluster.name=es-docker-cluster - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1 container_name: es02 environment: - node.name=es02 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data02:/usr/share/elasticsearch/data networks: - elastic es03: image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1 container_name: es03 environment: - node.name=es03 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es02 - cluster.initial_master_nodes=es01,es02,es03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - data03:/usr/share/elasticsearch/data networks: - elastic kib01: image: docker.elastic.co/kibana/kibana:7.12.1 container_name: kib01 ports: - 5601:5601 environment: ELASTICSEARCH_URL: http://es01:9200 ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]' networks: - elastic volumes: data01: driver: local data02: driver: local data03: driver: local networks: elastic: driver: bridge

Sau khi chạy thành công (với file docker-compose.yml ở trên), container của một master node es01, 2 slaves es02, es03 và kibana được tạo như dưới đây:

$ docker-composer ps
---------------------------------------------------------------------------------------------------
Name Command State Ports ---------------------------------------------------------------------------------------------------
es01 /bin/tini -- /usr/local/bi ... Up 0.0.0.0:9200->9200/tcp,:::9200->9200/tcp, 9300/tcp
es02 /bin/tini -- /usr/local/bi ... Up 9200/tcp, 9300/tcp es03 /bin/tini -- /usr/local/bi ... Up 9200/tcp, 9300/tcp kib01 /bin/tini -- /usr/local/bi ... Up 0.0.0.0:5601->5601/tcp,:::5601->5601/tcp 

Nếu có lỗi es0x exist with code 78, hãy chạy câu lệnh sau để tăng Virtual memory

$ sudo sysctl -w vm.max_map_count=262144

Bây giờ, bạn có thể truy cập vào Kibana tại địahttp://localhost:5601, Kibana cung cấp cho bạn rất nhiều tiện ích để làm việc với Elasticsearch

Một số Query DSL cơ bản

Tạo index

PUT /students?pretty

Tạo bản ghi

POST /human/_doc/1
{ "name": "Văn A", "university": "HUST", "Age": 22
}

Tìm kiếm tất cả index

GET /students/_search
{ "query": { "match_all": {} }
}

Tìm kiếm bằng trường dữ liệu

GET /students/_search
{ "query": { "match": { "name":"Văn D" } }
}

Lời kết

Mình cùng các bạn vừa tìm hiểu những kiến thức cơ bản về Elasticsearch, ưu nhược điểm để có thể áp dụng hợp lý, cũng như cách cài đặt Kibana. Cảm ơn các bạn đã quan tâm bài viết!

Tham khảo

elastic.co
javatpoint
hackernoon

Bình luận

Bài viết tương tự

- vừa được xem lúc

Elasticsearch là gì ?

. Lời nói đầu. Elasticsearch là gì .

0 0 23

- vừa được xem lúc

Backup và Restore Elasticsearch snapshot với AWS S3 trong Kubernetes

Ở công ty mình vừa có mấy task devops liên quan đến scaling, clustering Elasticsearch nên viết lại đề phòng sau này cần dùng. Có một task là chuyển dữ liệu từ single-node Elasticsearch cũ lên cluster mới.

0 0 39

- vừa được xem lúc

Reindex Elasticsearch data with zero downtime

Elasticsearch là một search engine tuyệt vời cho mọi dự án muốn áp dụng chức năng search cho sản phẩm của mình, với những tính năng như là near-realtime search, auto-complete, suggestion,.... Cùng với đó là lợi thế kiến trúc distributed search system, có thể dễ dàng scaling, failing handle. Khi muốn

0 0 32

- vừa được xem lúc

Fork you ElasticSearch! How Open Source Works

ElasticSearch recently dropped its open-source licensing strategy, prompting AWS to fork it. Learn how "Open Source" actually works and how companies profit from it.

0 0 36

- vừa được xem lúc

Tìm hiểu Text và Keyword trong Elasticsearch

Giới thiệu. Khi mình mới bắt đầu tìm hiểu về Elasticsearch mình không nghĩ rằng giữa kiểu dữ liệu Text và Keyword có sự khác nhau nhưng khi vào dự án thực tế mình mới nhận ra được sự khác biệt giữa 2

0 0 129

- vừa được xem lúc

[NLP] Cải thiện Elasticsearch trong bài toán semantic search sử dụng phương pháp Sentence Embeddings

Elasticsearch. Elasticsearch là gì .

0 0 685