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

ELASTICSEARCH - Hướng dẫn đọc ghi dữ liệu và truy vấn dữ liệu trên Elasticsearch

0 0 34

Người đăng: Nguyễn Đức Thảo

Theo Viblo Asia

Chào xìn anh em!!!! Mình là Nguyễn Đức Thảo, sau cơ số ngày luyện công với thằng Elasticsearch thì cũng có năm được những khái niệm và cách làm việc với thằng Elasticsearch này!

Bài viết này được viết ra với dựa trên những thứ mà mình biết, chỉ mang tính cá nhân thoy nhe ?

Có rất nhiều kiến thức sâu về thằng Elastic, nhưng bài viết này chỉ xoay quanh việc làm như thế nào để truy vấn dữ liệu và CRUD với Elasticsearch!

Elasticsearch là gì?

Trước khi tìm hiểu một vấn đề gì đó thì ta phải biết nó là gì đã!

Elasticsearch là một search engine (công cụ tìm kiếm) rất mạnh mẽ.

Elasticsearch cũng có thể coi là một document oriented database (1) , nó chứa dữ liệu giống như một database và thực hiện tìm kiếm trên những dữ liệu đó.

Đại khái là thay vì bạn tìm kiếm trên file, trên các database như MySQL, Oracle, MongoDB… thì bạn chuyển dữ liệu đó sang Elasticsearch và thực hiện tìm kiếm trên Elasticsearch sẽ mang lại hiệu quả rất lớn, đặc biệt là trong những trường hợp dữ liệu lớn.

Cái này mình coppy thôi chứ cũng lười viết lắm ✌️

(1) document oriented database là gì? - Thường thì khi làm việc với các database như mysql, sql server, oracle..v..v... thì ta phải define cấu trúc cho từng table, với document oriented database thì dữ liệu hiển thị dạng dưới object JSON, chính vì thế cấu trúc của nó sẽ có thể thay đổi theo ý muốn và không có cố định nào cả. Nôm na là thế ?

Bắt đầu đi vào việc thêm,sửa,xóa với Elasticsearch

NOTE: Trước khi đọc phần này thì hãy đọc bài viết những khái niệm của elasticsearch để hiểu cơ bản những khái niệm của ElasticSearch nhé !

Cài đặt Elasticsearch:

  • Có thể vào đây và làm theo hướng dẫn để cài trên MacOS,Linux,Window..v..v.. từ nhà sản xuất!
  • Nếu bạn không muốn cài nó trực tiếp vào máy của mình thì có thể sử dụng Docker theo các bước dưới đây:
    • B1: Tạo 1 file docker-compose.yml cùng cấp với thư mục src
    • B2: Coppy đoạn code này paste vào file này, nếu bạn không biết về Docker thì không cần quan tâm đến mấy dòng này ✌️ Nhưng bạn phải cài Docker Desktop trên máy của mình trước nhé, cài như thế nào thì trên gg rất nhiều
version: "3"
services: elasticsearch: container_name: viet-cinema-elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2 environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - bootstrap.memory_lock=true ports: - 9200:9200 volumes: - C:/data-es:/usr/share/elasticsearch/data kibana: container_name: viet-cinema-kibana image: docker.elastic.co/kibana/kibana:7.15.2 environment: - ELASTICSEARCH_HOSTS=http://viet-cinema-elasticsearch:9200 ports: - 5601:5601
#volumes:
# data-es:
# driver: ./data-es
    • B3 : Mở terminal ở trong IDE lên và chạy lệnh docker-compose up -d và nhấn enter và đợi khi nó chạy xong!
    • B4: Sau khi chạy xong bạn mở chrome lên vào truy cập vào url http://localhost:9200/ và nó ra kết quả như thế này là thành công:
      Do trên đoạn code trên mình có 1 phần là Kibana nhưng mình sẽ không dùng đến thằng này mà mình sẽ thay thế nó bằng PostMan nên các bạn cứ kệ nó ở đó đừng quan tâm đến nó ?

BẮT ĐẦU NÀO :

Ở trong elasticsearch sẽ public những API để ta làm việc với elasticsearch. Bắt đầu nào

API Hiển thị thông tin version, cluster

GET /

API Hiển thị chi tiết thông tin node:

GET /_cat/nodes?format=json

API liệt kê, hiển thị các Index trong Elasticsearch

GET /_cat/_indices?v

API tạo Index trong Elasticsearch

PUT /{index_name}

Cài đặt các field, số replica set, số shard khi tạo Index

PUT /index_name
{ "settings" : { "index" : { "number_of_shards" : 3, "number_of_replicas" : 2 } }
}

Mặc định number_of_shard = 5 và number_of_replicas = 1

Lưu ý về quy tắc đặt tên Index:

  • Chỉ được đặt tên index bằng chữ in thường
  • Không bao gồm các ký tự , /, *, ?, ", <, >, |, (khoảng trắng / dấu cách), ,, #
  • Từ Elasticsearch 7+ không được sử dụng ký tự :
  • Không được bắt đầu bằng các ký tự -, _, +
  • Không thể là . hoặc .., tuy nhiên có thể dùng ký tự . và kết hợp với các ký tự khác
  • Không được dài hơn 255 bytes

API xóa Index trong Elasticsearch

DELETE /index_name

Xóa nhiều index trong cùng 1 request

DELETE /index_name_1,index_name_2

Xóa tất cả Index trong 1 request

DELETE /_all

API Insert, thêm dữ liệu vào Elasticsearch

Cách 1: Dùng API POST

POST /index_name/type_name/id
{ "field" : "value"
}

Trong đó:

  • index_nametype_name là tên của Index và tên của Type, nếu chưa tồn tại thì sẽ được tự động tạo
  • id là id của document được tạo, nếu không truyền id thì nó sẽ tự động tạo ra 1 chuỗi để làm id.

Trường hợp mình không truyền id thì id của document mới sẽ được tự động tạo ra.

Trường hợp index, type và id truyền vào đã tồn tại thì nó sẽ tương đương với câu lệnh update.

Cách 2: Dùng API PUT

PUT /index_name/type_name/id
{ "field" : "value"
}

API get document Elasticsearch.

GET /index_name/type_name/id

Tuy nhiên trong dữ liệu trả về có khá nhiều field không cần thiết như index name, version… Để lấy data của mỗi document ta dùng thêm thẻ _source vào sau url

GET /index_name/type_name/id/_source

Trường hợp chỉ muốn lấy 1 số field trong document ta dùng tham số_source=field1,field2

API Update document Elasticsearch.

**Cách 1: Modifiy document bằng method **

PUT /index_name/type_name/id
{ "field": "data"
}

Cách 2: Update document bằng method

POST /index_name/type_name/id
{ "field": "data"
}

Hãy để ý dòng Version, cái này sẽ hiển thị số lần mà ta đã update cho document

Update document bằng method POST có tác dụng tương đương với method PUT

Tuy nhiên bản chất của việc update document bằng method POST khác với method PUT ở chỗ là method PUT sẽ replace / sửa lại dữ liệu trên document đã có còn method POST là xóa document cũ đi (nếu có tồn tại) và tạo 1 document mới.

API đọc dữ liệu – Tìm kiếm dữ liệu, document Elasticsearch

Tìm tất cả document trong tất cả các index

GET /_search

Hoặc

GET /_all/_search

Tìm tất cả document trong 1 type

GET /_search?q=word

Ví dụ tìm tất cả các document có chứa từ Đức trong field name

GET /_search?q=name:Đức

API Xóa dữ liệu trong Elasticsearch

Cách 1: Sử dụng DELETE API

DELETE /index_name/type_name/id

Ví dụ xóa document có id = 1 nằm trong type info của index nguyen-duc-thao

Cách 2: Xóa document bằng Query API

Để xóa document bằng Query API ta dùng method POST với thẻ _delete_by_query

POST /index_name/type_name/_delete_by_query
{ "query": { "match": { "message": "some message" } }
}

Kết

Như vậy là ta đã đi qua những hướng dẫn cơ bản để làm việc với elasticsearch rồi. Ở bài viết sau mình sẽ hướng dẫn áp dụng elasticsearch vào dự án spring boot

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 35

- 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 50

- 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 40

- 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 48

- 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 140

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

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

Elasticsearch là gì. 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ý.

0 0 113