TRƯỜNG ĐẠI xx
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN KHAI PHÁ DỮ LIỆU
ĐỀ TÀI:
TÌM HIỂU VỀ ELASTICSEARCH VÀ SỬ DỤNG
KHẢ NĂNG TÌM KIẾM CỦA NO
Giảng viên hướng dẫn
Sinh viên thực hiện
Chuyên ngành
Lớp
Khóa
: xxx
: xxxxx
: THƯƠNG MẠI ĐIỆN TỬ
: xx
: 2019 – 2023
Hà Nội, tháng 06 năm 2022
1
PHIẾU CHẤM ĐIỂM
Sinh viên thực hiện:
Họ và tên
Chữ ký
Ghi chú
xx
xx
Giảng viên chấm:
Họ và tên
Chữ ký
Ghi chú
Giảng viên chấm 1:
Giảng viên chấm 2:
2
MỤC LỤC
3
LỜI MỞ ĐẦU
Trong lời đầu tiên của báo cáo “Tìm hiểu Elasticsearch và sử dụng khả
năng tìm kiếm của nó”, nhóm chúng em muốn gửi những lời cảm ơn và biết ơn
chân thành nhất của mình tới tất cả những người đã hỗ trợ, giúp đỡ chúng em về
kiến thức và tinh thần trong quá trình thực hiện bài làm.
Chúng em xin chân thành gửi lời cảm ơn tới các thầy, cơ giáo trong Trường
Đại Học Điện Lực nói chung và các thầy cô giáo trong Khoa Công nghệ thông
tin nói riêng đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức
cũng như kinh nghiệm quý báu trong suốt quá trình học tập.
Đặc biệt, chúng em xin gửi lời cảm ơn đến Giảng viên hướng dẫn Phạm
Đức Hồng, giảng viên Khoa Công nghệ thông tin - Trường Đại Học Điện Lực.
Thầy đã tận tình theo sát giúp đỡ, trực tiếp chỉ bảo, hướng dẫn trong suốt quá
trình nghiên cứu và học tập của chúng em. Trong thời gian học tập với thầy,
chúng em không những tiếp thu thêm nhiều kiến thức bổ ích mà cịn học tập
được tinh thần làm việc, thái độ nghiên cứu khoa học nghiêm túc, hiệu quả. Đây
là những điều rất cần thiết cho chúng em trong q trình học tập và cơng tác sau
này.
Do thời gian thực hiện có hạn kiến thức cịn nhiều hạn chế nên bài làm của
nhóm chúng em chắc chắn khơng tránh khỏi những thiếu sót nhất định. Chúng
em rất mong nhận được ý kiến đóng góp của thầy, cơ giáo và các bạn để nhóm
em có thêm kinh nghiệm và tiếp tục hoàn thiện báo cáo của mình.
Chúng em xin chân thành cảm ơn!
4
CHƯƠNG 1. TỔNG QUAN KHAI PHÁ DỮ LIỆU
1.1 Giới thiệu về khai phá dữ liệu
Khai phá dữ liệu (data mining): Là q trình tính tốn để tìm ra các mẫu
trong các bộ dữ liệu lớn liên quan đến các phương pháp tại giao điểm của máy
học, thống kê và các hệ thống cơ sở dữ liệu. Đây là một lĩnh vực liên ngành của
khoa học máy tính… Mục tiêu tổng thể của q trình khai thác dữ liệu là trích
xuất thơng tin từ một bộ dữ liệu và chuyển nó thành một cấu trúc dễ hiểu để sử
dụng tiếp. Ngoài bước phân tích thơ, nó cịn liên quan tới cơ sở dữ liệu và các
khía cạnh quản lý dữ liệu, xử lý dữ liệu trước, suy xét mơ hình và suy luận thống
kê, các thước đo thú vị, các cân nhắc phức tạp, xuất kết quả về các cấu trúc được
phát hiện, hiện hình hóa và cập nhật trực tuyến. Khai thác dữ liệu là bước phân
tích của q trình "khám phá kiến thức trong cơ sở dữ liệu" hoặc KDD.
1.1.1 Diễn giải
Khai phá dữ liệu là một bước của q trình khai thác tri thức (Knowledge
Discovery Process), bao gờm:
-Xác định vấn đề và không gian dữ liệu để giải quyết vấn đề (Problem
understanding and data understanding).
-Chuẩn bị dữ liệu (Data preparation), bao gờm các q trình làm sạch dữ
liệu (data cleaning), tích hợp dữ liệu (data integration), chọn dữ liệu (data
selection), biến đổi dữ liệu (data transformation).
-Khai thác dữ liệu (Data mining): xác định nhiệm vụ khai thác dữ liệu và
lựa chọn kỹ thuật khai thác dữ liệu. Kết quả cho ta một nguồn tri thức thô.
-Đánh giá (Evaluation): dựa trên một số tiêu chí tiến hành kiểm
tra và lọc ng̀n tri thức thu được.
-Triển khai (Deployment).
- Q trình khai thác tri thức khơng chỉ là một q trình tuần tự từ bước đầu
tiên đến bước cuối cùng mà là một q trình lặp và có quay trở lại các bước đã
qua.
1.1.2 Các phương pháp khai thác dữ liệu
5
Phân loại (Classification): Là phương pháp dự báo, cho phép phân loại
một đối tượng vào một hoặc một số lớp cho trước.
Hồi qui (Regression): Khám phá chức năng học dự đoán, ánh xạ một
mục dữ liệu thành biến dự đoán giá trị thực.
Phân nhóm (Clustering): Một nhiệm vụ mơ tả phổ biến trong đó người
ta tìm cách xác định một tập hợp hữu hạn các cụm để mô tả dữ liệu.
Tổng hợp (Summarization): Một nhiệm vụ mô tả bổ sung liên quan đến
phương pháp cho việc tìm kiếm một mơ tả nhỏ gọn cho một bộ (hoặc tập hợp
con) của dữ liệu.
Mơ hình ràng buộc (Dependency modeling): Tìm mơ hình cục bộ mô tả
các phụ thuộc đáng kể giữa các biến hoặc giữa các giá trị của một tính năng
trong tập dữ liệu hoặc trong một phần của tập dữ liệu.
Dò tìm biến đổi và độ lệch (Change and Deviation Dectection): Khám
phá những thay đổi quan trọng nhất trong bộ dữ liệu.
1.1.3 Một số tính năng nổi bật của khai phá dữ liệu
•
•
•
•
•
Dự đốn các mẫu dựa trên xu hướng trong dữ liệu.
Tính tốn dự đốn kết quả.
Tạo thơng tin phản hời để phân tích.
Tập trung vào cơ sở dữ liệu lớn hơn.
Phân cụm dữ liệu trực quan.
1.1.4 Quy trình khai phá dữ liệu
Các bước quan trọng khi khai phá dữ liệu bao gồm:
Bước 1: Tiền xử lý, làm sạch dữ liệu – Trong bước này, dữ liệu được làm
sạch sao cho khơng có tạp âm hay bất thường trong dữ liệu.
Bước 2: Tích hợp dữ liệu – Trong quá trình tích hợp dữ liệu, nhiều ng̀n
dữ liệu sẽ kết hợp lại thành một.
Bước 3: Lựa chọn dữ liệu – Trong bước này, dữ liệu được trích xuất từ cơ
sở dữ liệu.
6
Bước 4: Chuyển đổi dữ liệu – Trong bước này, dữ liệu sẽ được chuyển đổi
để thực hiện phân tích tóm tắt cũng như các hoạt động tổng hợp.
Bước 5: Khai phá dữ liệu – Trong bước này, chúng ta trích xuất dữ liệu hữu
ích từ nhóm dữ liệu hiện có.
Bước 6: Đánh giá mẫu – Chúng ta phân tích một số mẫu có trong dữ liệu.
Bước 7: Trình bày thông tin – Trong bước cuối cùng, thông tin sẽ được thể
hiện dưới dạng cây, bảng, biểu đồ và ma trận. Quá trình được thực hiện qua 9
bước:
1- Tìm hiểu lĩnh vực của bài tốn (ứng dụng): Các mục đích của bài toán,
các tri thức cụ thể của lĩnh vực.
2- Tạo nên (thu thập) một tập dữ liệu phù hợp.
3- Làm sạch và tiền xử lý dữ liệu.
4- Giảm kích thức của dữ liệu, chuyển đổi dữ liệu: Xác định thuộc tính
quan trọng, giảm số chiều (số thuộc tính), biểu diễn bất biến.
5- Lựa chọn chức năng khai phá dữ liệu: Phân loại, gom cụm, dự báo, sinh
ra các luật kết hợp.
6- Lựa chọn/ Phát triển (các) giải thuật khai phá dữ liệu phù hợp.
7- Tiến hành khai phá dữ liệu.
8- Đánh giá mẫu thu được và biểu diễn tri thức: Hiển thị hóa, chuyển đổi,
bỏ đi các mẫu dư thừa,…
9 - Sử dụng tri thức được khai phá.
7
Hình 1.1 Quy trình khai phá dữ liệu
1.1.5 Ứng dụng khai phá dữ liệu
Có nhiều ứng dụng của khai phá dữ liệu thường thấy như:
• Phân tích thị trường chứng khốn.
• Phát hiện gian lận.
• Quản lý rủi ro và phân tích doanh nghiệp…
1.1.6 Các cơng cụ khai phá dữ liệu
RapidMiner: Cơng cụ đầu tiên phải kể tới đó là RapidMiner. Đây là công
cụ khai phá dữ liệu khá phổ biến hiện nay. Được viết trên nền tảng JAVA nhưng
không u cầu mã hóa để vận hành. Ngồi ra, nó còn cung cấp các chức năng
khai thác dữ liệu khác nhau như tiền xử lý dữ liệu, biểu diễn dữ liệu, lọc, phân
cụm...
Weka: Công cụ được cho ra đời tại Đại học Wichita là một phần mềm khai
thác dữ liệu mã nguồn mở. Tương tự như RapidMiner, công cụ này khơng u
cầu mã hóa và sử dụng GUI đơn giản.
8
Sử dụng Weka, người dùng có thể gọi trực tiếp các thuật toán học máy hoặc
nhập chúng bằng mã Java. Weka được trang bị đa dạng chức năng như trực quan
hóa, tiền xử lý, phân loại, phân cụm...
Knime: Với khả năng hoạt động vơ cùng mạnh mẽ tích hợp nhiều thành
phần khác nhau của học máy và khai phá dữ liệu để cung cấp một nền tảng.
KNime hỗ trợ người dùng rất nhiều trong việc xử lý và phân tích dữ liệu, trích
xuất, chuyển đổi và tải dữ liệu.
Apache Mahout: Từ nền tảng Big Data Hadoop, người ta đã cho cho ra
đời thêm Apache Mahout với mục đích giải quyết nhu cầu ngày càng tăng về
khai phá dữ liệu và hoạt động phân tích trong Hadoop. Nó được trang bị nhiều
chức năng học máy khác nhau như phân loại, hồi quy, phân cụm...
Oracle Data Mining: Khi sử dụng Oracle Data Mining. nó cho phép người
dùng thực hiện khai phá dữ liệu trên cơ sở dữ liệu SQL để trích xuất các khung
hình và biểu đờ. Các phân tích sẽ hiển thị một cách trực quan giúp người dùng
dễ dàng đưa ra dự đoán cho kế hoạch tương lai.
TeraData: TeraData cung cấp dịch vụ kho chứa các công cụ khai phá dữ
liệu. Nhờ khả năng thông minh được trang bị, công cụ có thể dựa trên tần suất
sử dụng dữ liệu của người dùng và thực hiện việc cho phép truy cập nhanh hay
chậm.
Với một dữ liệu bạn thường xuyên cần sử dụng, TeraData sẽ cho phép truy
cập nhanh hơn là một dữ liệu ít được sử dụng. Đối với dữ liệu, nhập kho là một
yêu cầu cần thiết.
Orange: Công cụ được lập trình bằng Python với giao diện trực quan và
tương tác dễ dàng. Phần mềm Orange được biết đến bởi việc tích hợp các cơng
cụ khai phá dữ liệu và học máy thông minh, đơn giản.
1.2 Tiền xử lý
Quá trình tiền xử lý dữ liệu, đầu tiên phải nắm được dạng dữ liệu, thuộc
tính, mơ tả của dữ liệu thao tác. Sau đó tiếp hành 4 giai đoạn chính: làm sạch,
tích hợp, biến đổi, thu giảm dữ liệu.
9
1.2.1 Dữ liệu
Tập dữ liệu
- Một tập dữ liệu (dataset) là một tập hợp các đối tượng (object) và các
thuộc tính của chúng.
- Mỗi thuộc tính (attribute) mơ tả một đặc điểm của một đối tượng.
Hình 1.2. Ví dụ dataset
Các kiểu tập dữ liệu
- Bản ghi (record): Các bản ghi trong cở sở dữ liệu quan hệ. Ma trận dữ
liệu. Biểu diễn văn bản. Hay dữ liệu giao dịch.„
- Đồ thị (graph): World wide web. Mạng thông tin, hoặc mạng xã hội
- Dữ liệu có trật tự: Dữ liệu khơng gian (ví dụ: bản đờ). Dữ liệu thời gian
(ví dụ: time-series data). Dữ liệu chuỗi (ví dụ: chuỗi giao dịch).
Các kiểu giá trị thuộc tính:
- Kiểu định danh/chuỗi (norminal): khơng có thứ tự. Ví dụ: Các thuộc tính
như : Name, Profession, …
- Kiểu nhị phân (binary): là một trường hợp đăc biệt của kiểu định danh.
Tập các giá trị chỉ gờm có 2 giá trị (Y/N, 0/1, T/F).
- Kiểu có thứ tự (ordinal): Integer, Real, …
- Lấy giá trị từ một tập có thứ tự giá trị. Ví dụ: Các thuộc tính lấy giá trị số
như : Age, Height ,… Hay lấy một tập xác định, thuộc tính Income lấy giá trị từ
tập {low, medium, high}.
10
Kiểu thuộc tính rời rạc (discrete-valued attributes): có thể là tập các giá trị
của một tập hữu hạn. Bao gồm thuộc tính có kiểu giá trị là các số ngun, nhị
phân.
Kiểu thuộc tính liên tục (continuous-valued attributes):Các giá trị là số
thực.
Các đặc tính mơ tả của dữ liệu:
- Giúp hiểu rõ về dữ liệu có được: chiều hướng chính/trung tâm, sự biến
thiên, sự phân bố.
- Sự phân bố của dữ liệu (data dispersion):
+ Giá trị cực tiểu/cực đại (min/max).
+ Giá trị xuất hiện nhiều nhất (mode).
+ Giá trị trung bình (mean).
+ Giá trị trung vị (median).
+ Sự biến thiên (variance) và độ lệch chuẩn (standard deviation) .
+ Các ngoại lai (outliers).
1.2.2 Làm sạch dữ liệu (data cleaning)
Đối với dữ liệu thu thập được, cần xác định các vấn đề ảnh hưởng là cho nó
khơng sạch. Bởi vì, dữ liệu khơng sạch (có chứa lỗi, nhiễu, khơng đầy đủ, có
mâu thuẫn) thì các tri thức khám phá được sẽ bị ảnh hưởng và không đáng tin
cậy, sẽ dẫn đến các quyết định khơng chính xác. Do đó, cần gán các giá trị thuộc
tính cịn thiếu; sửa chữa các dữ liệu nhiễu/lỗi; xác định hoặc loại bỏ các ngoại lai
(outliers); giải quyết các mâu thuẫn dữ liệu.
1.2.2.1 Các vấn đề của dữ liệu
Trên thực thế dữ liệu thu có thể chứa nhiễu, lỗi, khơng hồn chỉnh, có
mâu thuẫn.
- Khơng hồn chỉnh (incomplete): Thiếu các giá trị thuộc tính hoặc thiếu
một số thuộc tính. Ví dụ: salary = <undefined>.
11
- Nhiễu/lỗi (noise/error): Chứa đựng những lỗi hoặc các mang các giá trị
bất thường. Ví dụ: salary = “-525” , giá trị của thuộc tính khơng thể là một số
âm.
- Mâu thuẫn (inconsistent): Chứa đựng các mâu thuẫn (không thống nhất).
Ví dụ: salary = “abc” , khơng phù hợp với kiểu dữ liệu số của thuộc tính salary.
1.2.2.2 Nguồn gốc/lý do của dữ liệu khơng sạch
- Khơng hồn chỉnh (incomplete): Do giá trị thuộc tính khơng có (not
available) tại thời điểm được thu thập. Hoặc các vấn gây ra bởi phần cứng, phần
mềm, hoặc người thu thập dữ liệu.
- Nhiễu/lỗi (noise/error): Do việc thu thập dữ liệu, hoăc việc nhập dữ liệu,
hoặc việc truyền dữ liệu.
- Mâu thuẫn (inconsistent): Do dữ liệu được thu thập có ng̀n gốc khác
nhau. Hoặc vi phạm các ràng buộc (điều kiện) đối với các thuộc tính.
1.2.2.3 Giải pháp khi thiếu giá trị của thuộc tính
- Bỏ qua các bản ghi có các thuộc tính thiếu giá trị. Thường áp dụng trong
các bài toán phân lớp. Hoặc khi tỷ lệ % các giá trị thiếu đối với các thuộc tính
quá lớn.
- Một số người sẽ đảm nhiệm việc kiểm tra và gán các giá trị thuộc tính cịn
thiếu, nhưng địi hỏi chi phí cao và rất tẻ nhạt.
- Gán giá trị tự động bởi máy tính:
+ Gán giá trị mặc định
+ Gán giá trị trung bình của thuộc tính đó.
+ Gán giá trị có thể xảy ra nhất – dựa theo phương pháp xác suất.
1.2.2.4 Giải pháp khi dữ liệu chứa nhiễu/lỗi
- Phân khoảng (binning): Sắp xếp dữ liệu và phân chia thành các khoảng
(bins) có tần số xuất hiện giá trị như nhau. Sau đó, mỗi khoảng dữ liệu có thể
được biểu diễn bằng trung bình, trung vị, hoặc các giới hạn … của các giá trị
trong khoảng đó.
12
- Hồi quy (regression): Gắn dữ liệu với một hàm hồi quy.
- Phân cụm (clustering): Phát hiện và loại bỏ các ngoại lai (sau khi đã xác
định các cụm).
- Kết hợp giữa máy tính và kiểm tra của con người: Máy tính sẽ tự động
phát hiện ra các giá trị nghi ngờ. Các giá trị này sẽ được con người kiểm tra lại.
1.2.3. Tích hợp dữ liệu (data integration)
Tích hợp dữ liệu là quá trình trộn dữ liệu từ các ng̀n khác nhau vào một
kho dữ liệu có sẵn cho q trình khai phá dữ liệu. Khi tích hợp cần xác định thực
thể từ nhiều nguồn dữ liệu để tránh dư thừa dữ liệu.
Ví dụ: Bill Clinton ≡ B.Clinton. Việc dư thừa dữ liệu là thường xuyên xảy
ra, khi tích hợp nhiều ng̀n. Bởi cùng một thuộc tính (hay cùng một đối tượng)
có thể mang các tên khác nhau trong các nguồn (cơ sở dữ liệu) khác nhau. Hay
các dữ liệu suy ra được như một thuộc tính trong một bảng có thể được suy ra từ
các thuộc tính trong bảng khác. Hay sự trùng lắp các dữ liệu. Các thuộc tính dư
thừa có thể bị phát hiện bằng phân tích tương quan giữa chúng.
Phát hiện và xử lý các mâu thuẫn đối với giá trị dữ liệu: Đối với cùng một
thực thể trên thực tế, nhưng các giá trị thuộc tính từ nhiều ng̀n khác nhau lại
khác nhau. Có thể cách biểu diễn khác nhau, hay mức đánh giá, độ do khác
nhau. Yêu cầu chung đối với quá trình tích hợp là giảm thiểu (tránh được là tốt
nhất) các dư thừa và các mâu thuẫn. Giúp cải thiện tốc độ của quá trình khai phá
dữ liệu và nâng cao chất lượng của các kết quả tri thức thu được.
1.2.4. Biến đổi dữ liệu (data transformation)
Biến đổi dữ liệu là việc chuyển toàn bộ tập giá trị của một thuộc tính sang
một tập các giá trị thay thế, sao cho mỗi giá trị cũ tương ứng với một trong các
giá trị mới.
Các phương pháp biến đổi dữ liệu:
- Làm trơn (smoothing): Loại bỏ nhiễu/lỗi khỏi dữ liệu.
- Kết hợp (aggregation): Sự tóm tắt dữ liệu, xây dựng các khối dữ liệu.
13
- Khái quát hóa (generalization): Xây dựng các phân cấp khái niệm. Chuẩn hóa (normalization): Đưa các giá trị về một khoảng được chỉ định.
+ Chuẩn hóa min-max, giá trị mới nằm khoảng [new_mini , new_maxi]
+ Chuẩn hóa z-score, với μi , σi : giá trị trung bình và độ lệch chuẩn của
thuộc tính i
+ Chuẩn hóa bởi thang chia 10, với j là giá trị số nguyên nhỏ nhất sao cho:
max({vnew}) < 1
- Xây dựng các thuộc tính mới dựa trên các thuộc tính ban đầu.
1.2.5. Thu giảm dữ liệu (data reduction)
Một kho dữ liệu lớn có thể chứa lượng dữ liệu lên đến terabytes sẽ làm cho
quá trình khai phá dữ liệu chạy rất mất thời gian, do đó nên thu giảm dữ liệu.
Việc thu giảm dữ liệu sẽ thu được một biểu diễn thu gọn, mà nó vẫn sinh ra cùng
(hoặc xấp xỉ) các kết quả khai phá như tập dữ liệu ban đầu. Các chiến lược thu
giảm:
- Giảm số chiều (dimensionality reduction), loại bỏ bớt các thuộc tính
khơng (ít) quan trọng.
- Giảm lượng dữ liệu (data/numberosity reduction)
+ Kết hợp khối dữ liệu.
14
+ Nén dữ liệu.
+ Hời quy.
+ Rời rạc hóa.
15
CHƯƠNG 2. TỔNG QUAN VỀ KỸ THUẬT ELASTICSEARCH
2.1 Giới thiệu về kĩ thuật Elasticsearch
Trong thế giới công nghệ ngày nay, một lượng lớn dữ liệu định xấp xỉ 2,5
nghìn tỷ byte được tạo ra mỗi ngày. Dữ liệu này chủ yếu đến từ các nguồn khác
nhau: từ các trang social media sites, trang video sharing, cho đến các tổ chức
quy mơ trung bình đến khổng lờ. Tồn bộ các dữ liệu này được gọi là data
ocean, hoặc gọi tên theo cách chun mơn hơn, đó chính là Big Data. Phần lớn
khi các dữ liệu này đứng riêng một mình mà khơng hề có sự thống kê hay phân
tích nào, chúng sẽ trở nên vơ nghĩa, đờng thời khơng có chút giá trị nghiên cứu
nào cả. Để làm cho các dữ liệu này trở nên ý nghĩa, bạn cần có các cơng cụ phục
vụ cho việc phân tích. Có rất nhiều cơng cụ phân tích sẵn có trên thị trường giúp
bạn có thể khám phá, ghi lại, truy cập, phân tích và xử lý các dữ liệu phi cấu trúc
này. Trong số tất cả có thể nhắc tới Elasticsearch là một trong những công cụ
nổi bật nhất.
2.1.1 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 tồ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 ng̀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ữ.
Chi tiết:
• Elasticsearch là một search engine.
• Elasticsearch được kế thừa từ Lucene Apache
• Elasticsearch thực chất hoặt động như 1 web server, có khả năng tìm
kiếm nhanh chóng (near realtime) thơng qua giao thức RESTful
• Elasticsearch có khả năng phân tích và thống kê dữ liệu
• Elasticsearch chạy trên server riêng và đờng thời giao tiếp thơng qua
RESTful do vậy nên nó khơng phụ thuộc vào client viết bằng gì hay
16
hệ thống hiện tại của bạn viết bằng gì. Nên việc tích hợp nó vào hệ
thống bạn là dễ dàng, bạn chỉ cần gửi request http lên là nó trả về kết
quả.
• Elasticsearch là 1 hệ thống phân tán và có khả năng mở rộng tuyệt
vời (horizontal scalability). Lắp thêm node cho nó là nó tự động auto
mở rộng cho bạn.
• Elasticsearch là 1 open source được phát triển bằng Java.
2.1.2 Elasticsearch hoạt động như thế nào?
Sau khái niệm Elasticsearch là gì, thì chúng ta lại tiếp tục tìm hiểu hoạt
đơng của Elasticsearch, đó là 1 server riêng biệt để “phục vụ” việc tìm kiếm dữ
liệu. ES sẽ chạy một cổng (dưới local default là 9200). Người ta cũng có thể
dùng ES là DB chính nhưng thường khơng ai làm thế vì cái gì cũng có nhiệm vụ
riêng biệt của nó.
ES khơng mạnh trong các thao tác CRUD, nên thường sẽ dùng song song
với 1 DB chính (SQL, MySQL, MongoDB …)
2.2 Các khái niệm cần biết
2.2.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
17
đị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.2.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.
2.2.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.
2.2.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.
2.2.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.
2.2.6 Cluster
18
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 tồ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 đó
ln 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.
2.2.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.
2.2.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 ln 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.
2.3 Ưu nhược điểm của kĩ thuật Elasticsearch
2.3.1 Ưu điểm
- 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.
- Tốc độ
19
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.
- Dễ dàng sử dụng API
Elasticsearch cung cấp các API RESTful đơn giản và sử dụng các schemafree JSON documents giúp việc indexing, searching, và querying thật dễ dàng.
- Đ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,...
- 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 ln 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.
- Tự động hoàn thành (autocompletion)
Elasticsearch cung cấp chức năng tự động hồn thành. Bằng cách dự đố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.
- 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.
2.3.2 Nhược điểm
- Elasticsearch được thiết kế cho mục đích search, do vậy với những nhiệm
vụ khác ngồi search như CRUD thì elastic kém thế hơn so với những database
khác như Mongodb, Mysql …. Do vậy người ta ít khi dùng elasticsearch làm
database chính, mà thường kết hợp nó với 1 database khác.
20
- Trong elasticsearch khơng có khái niệm database transaction , tức là nó sẽ
khơng đảm bảo được tồn vẹn dữ liệu trong các hoạt động
Insert, Update, Delete. Tức khi chúng ta thực hiện thay đổi nhiều bản ghi nếu
xảy ra lỗi thì sẽ làm cho logic của mình bị sai hay dẫn tới mất mát dữ liệu. Đây
cũng là 1 phần khiến elasticsearch khơng nên là database chính.
- Khơng thích hợp với những hệ thống thường xuyên cập nhật dữ liệu. Sẽ
rất tốn kém cho việc đánh index dữ liệu.
21
CHƯƠNG 3. TRIỂN KHAI CHƯƠNG TRÌNH
3.1 Cài đặt Elasticsearch
B1: Tạo 1 file docker-compose.yml cùng cấp với thư mục src
B2 : 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!
B3: Kiểm tra: 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
22
3.2 Hiện thị thông tin Elasticsearch
3.3 Tạo và cập nhật Index Document trong Elasticsearch
Liệt kê các Index:
Muốn liệt kê các Index thì GET đến /_cat/indices?v
Khởi tạo một Index:
23
PUT /customer?pretty
Xóa một index:
DELET /indexname?pretty
GET /_cat/indices?v
DELETE /hoc-sinh/_doc/2
PUT /hoc-sinh
PUT /hoc-sinh/_doc/1
{
"name":"duc",
"age": "22",
"class": "D14HTTMDT2"
}
GET /article/_doc/1
GET /article
3.4 Truy vấn, tìm kiếm trong Elasticsearch
Truy vấn
# tìm tất cả các Document có trong index /hoc-sinh/
GET bank/_search
{
24
"query": { "match_all": {} }
}
# took – thời gian (mili giây) hoàn thành truy vấn
# timed_out - cho biết vượt thời gian (thời gian hoàn thành vượt ngưỡng bị
dừng) hay khơng
# _shards - cho biết tìm trên bao nhiêu shard (phân đoạn index)
# hits - kết quả tìm kiếm
# hits.total - tổng số kết quả tìm được
# hits.hits - mảng dữ liệu thực sự trả về (mặc định 10 document đầu tiên)
#cho thêm vào tham số size để lấy số kết quả trả về (mặc định nếu khơng
chỉ ra nó sẽ trả về tối đa 10)
GET bank/_search
{
"query": { "match_all": {} },
"size": 3
}
#dữ liệu trả về bắt đầu từ phần tử nào với tham số from
GET bank/_search
{
"query": { "match_all": {} },
"from": 2,
"size": 10
}
25