Viblo CTF
+1

Giới Thiệu Về Elastic Search - PHẦN 2: Cài đặt Elastic Search trên windows và truy vấn cơ bản

1. Lời Mở Đầu

chào các bạn, lại là mình đây, ở phần trước mình đã giới thiệu sơ qua về đặc điểm của elastic search cũng như cách cài đặt nó trên ubuntu, nếu các bạn chưa xem thì có thể nhấn link sau: Phần 1. Ở phần này, mình sẽ hướng dẫn cài đặt elastic trên windows cũng như thực hiện 1 vài truy vấn cơ bản

2. Cài Đặt Elastic Search Trên Windows

A. thông tin phiên bản

  • Windows 10 Pro x64
  • Elastic Search 7.12.1
  • Kibana 7.12.1

B. Cài Java

cài java

các bạn có thể cài jdk 8 theo link sau: JDK

set up java home

vào mục enviroments variable->trong phần system variables thêm vào như sau

tìm vào biến PATH thêm đường dẫn /bin

các bạn có thể test xem cài được chưa bằng lệnh java –-version

C. Cài ElasticSearch

vào thư mục elasticsearch->bin->elasticsearch.bat và chờ khoảng 30 giây, nếu không có vấn đề gì thì khi bạn gõ lệnh curl localhost:9200 nó sẽ hiện ra như sau

D. Cài Kibana

tương tự với elasticsearch các bạn vào thư mục kibana phần bin/kibana.bat để mở tuy nhiên mình đã thử và không thấy hiện, mình đã thử tắt kibana đồng thời sửa phần config giống như mình đã làm với linux ở phần 1, sau đó mình mở lại kibana.bat và sau khoảng gần 1 phút cuối cùng nó cũng đã chạy, nói chung các bạn chờ 5 phút mà không thấy nó hiện thì thử tắt firewall ( không lên nữa thì tải elastic và kibana 6 thôi, nhiều thằng có mấy cái bug khó chịu lắm 🤣)

mình có thử tra qua vấn đề này trên mạng thì có vẻ đây là bug hay firewall gì đấy nói chung trước khi chạy các bạn thử tắt firewall thử, link bugs: https://discuss.elastic.co/t/kibana-bat-shows-nothing-on-windows-10/163611, không có kibana thì ban đầu dùng postman cũng ổn mà

3. Cách Sử dụng API

lưu ý: nếu các bạn không thể khởi động kibana do port đã bị process khác chiếm dụng thì các bạn có thể đổi port trong thư mục config hoặc làm theo cách sau:

sudo netstat -lpn |grep :8080

tìm processId của nó và gắn vào câu lệnh sau

kill -p <processID>

ở đây mình sẽ không nói lại về định nghĩa API cũng như các phương thức của nó , các bạn có thể tham khảo thông qua link dưới đây: API

A. Linux

cách 1. Truy cập trực tiếp thông qua Elastic ở trên linux ta có thể dễ dàng sử dụng elastic thông qua câu lệnh curl : curl -X PHƯƠNG_THỨC http://localhost:9200 VD:

curl -X GET http://localhost:9200 

truy cập elasticsearch thông qua phương thức GET

tiếp theo ta sẽ gởi thông tin với dữ liệu JSON khi cần gửi dữ liệu JSON đi kèm, cần chỉ định HEADER Content-Type: application/json để làm điều này cho vào tham số curl đoạn mã -H Content-Type: application/json, sau đó là nội dung JSON-d {Nội dung JSON} ví dụ : để tạo mới 1 dữ liệu bằng phương thức PUT

curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: appliation/json' -d' { "name": "John Doe", "age": "20" } 

cách 2. Tương tác với Elastic Thông qua Kibana

mở kibana thông qua port - 5601 : “localhost:5601“ hoặc “your-linux-machine-ip:5601“ nếu bạn dùng vmware

để chạy các dòng lệnh các bạn cần bôi đen chúng rồi nhấn vào biểu tượng play ở bên phải

B. Windows

đối với window ngoài việc sử dụng kibana, thì với bản chất là truy vấn API các bạn còn có thể sử dụng Postman

4. Truy vấn cơ bản trong ElasticSearch

A. Kiểm tra tình trạng của ElasticSearch

các bạn có thể thử sử dụng API bằng cách gọi API kiểm tra tình trạng của elastic: localhost:9200/_cat/health?v

LINUX

WINDOWS với postman

để ý cột status có 3 trạng thái chính • Green Mọi thứ OK, cluster có thể thực hiện đầy đủ chức năng • Yellow Dữ liệu ổn, nhưng có các bản backup replicas • Red dữ liệu có vấn đề

B. xây dựng data bằng phương thức POST và PUT

ở đây mình sẽ sử dụng dev tools của kibana cho nhanh🤗

để thêm dữ liệu cho ElasticSearch đầu tiên ta tạo 1 index

PUT school

nếu tạo thành công nó sẽ trả về như sau:

{"acknowledged": true}

thêm vào index school 1 _doc có _id = 10

POST school/_doc/10
{
   "name":"Saint Paul School", "description":"ICSE Afiliation",
   "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075",
   "location":[28.5733056, 77.0122136], "fees":5000,
   "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
}

như các bạn có thể thấy dữ liệu được thêm vào sẽ nằm trong phần source

C. Các phương thức hỗ trợ xóa và sửa

phương thức xóa

bạn có thể xóa 1 index thông qua phương thức DELETE

ở đây mình xóa 1 _doc có _id = 10

DELETE school/_doc/10  

nếu thành công bạn sẽ nhận được response sau:
{
   "found":true, "_index":"schools", "_type":"school", "_id":"10", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0
}

phương thức sửa tham khảo thêm: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html sửa _doc trong index school có _id = 10

  • sửa 1 dòng ở đây mình muốn sửa dữ liệu bên trên sname thành “Viablo School”
POST school/_update/10
{
   "script" : {
	
      "source": "ctx._source.name = params.sname",  gán source name = sname bên trong params
      "lang": "painless",
      "params" : {
         "sname" : "Viablo School"
      }
   }
 }

  • sửa bên trong mảng ở đây mình muốn sửa bên trong mảng tags bên trên thêm “cool”
POST school/_update/10
{
   "script" : {
	
      "source": " ctx._source.tags.add(params.tag)",
      "lang": "painless",
      "params" : {
         "tag" :”Cool"
      }
   }
 }

D. Phương thức tìm kiếm cơ bản

1. Tìm Kiếm Cơ Bản

  • xem document thông qua 1 vài dòng
    GET schools/_doc/10?_source_includes=name,fees 

  • Chỉ xem thông tin của phần _source

như các bạn đã thấy ngoài phần source là thông tin chính mà chúng ta đã thêm vào còn rất nhiều thông tin không cần thiết, để dễ trong công việc sau này, ta phải loại bỏ chúng

GET schools/_doc/10?_source

  • Lấy thông tin trên nhiều index
GET /index1,index2,index3/_search

<hình>

2. Tham Số Tìm Kiếm

lưu ý : những thông tin được trả ra khi sử dụng _search sẽ được lưu trong trong thuộc tính “hits” dưới dạng mảng , các bạn cần chú ý khi sử dụng sau này

  • tham số “q”: tìm kiếm thông tin trong 1 trường
POST school/_search/?q=city:Delhi

  • tham số "fields": Lấy thông tin từ trường được chỉ định sẵn
POST school/_search
{
  "fields": ["city"],
  "_source": false
}

  • Tham Số "from":
POST school/_search/?from=0

đây là điểm bắt đầu trong index

giả sử trong index của bạn chỉ có 1 docs nhưng bạn lại để giá trị from là 1 thì sẽ giá trị trả về là rỗng

  • tham số "sort": tham số này sẽ sort các cột theo giảm dần (desc) hoặc tăng dần (asc)
POST school/_search/?sort=fees:asc

  • tham số "size": số lượng docs sẽ được trả về, mặc định là 10
POST school/_search/?size=20

4. Tổng Kết

Hello, cuối cùng đã kết thúc xong phần 2 của Series ElasticSearch, mình cũng vừa viết vừa học nên cũng không có nhiều kinh nghiệm lắm 😜, ở phần sau mình dự định sẽ làm về các truy vấn nâng cao cũng như mình sẽ đào sâu 1 chút vào kibana, mình cũng dự định sẽ tìm cách kết hợp ElasticSearch với một database nào đó (ai cũng bảo nói là search engine bên cạnh database chính mà , như các bạn đã thấy ở trên nó thực hiện các lệnh thêm, sửa, xóa hơi dỏm tí 😁) thế nên mong các bạn đón xem

như thường lệ, nếu có vấn đề nào thắc mắc mong các bạn có thể comment để mình có thể support hết sức

LAST-EDIT: HÓNG MAY ~ FEST

5. Tham Khảo


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.