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

26 tháng 11, 2021 - 8572 lượt xem

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

avatar
Trịnh Đình Cương 2022-10-21 07:54:44.321003 +0000 UTC

bạn ơi, b có thể ping giúp m vào zalo 0908184400 hoặc skype live:trinhdinhcuong1996 không ? mình cần bạn giúp đỡ 1 chút về elasticsearch này. Cảm ơn b

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0