Elasticsearch thường được sử dụng trong việc tìm kiếm đơn giản trên trang web, chỉ mục và thu thập dữ liệu, cho đến phân tích và trực quan hóa dữ liệu kinh doanh.. Elasticsearch thườn
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH
BÁO CÁO TIỂU LUẬN MÔN HỌC Tìm hiểu về công cụ tìm kiếm Elasticsearch
và ứng dụng tìm kiếm vào website thương mại
điện tử
Môn học:
Các hệ cơ sở dữ liệuNgành:
CÔNG NGHỆ THÔNG TINGiảng viên: PGS.TS Nguyễn Thị Thúy Loan
Nhóm học viên thực hiện
Tháng 9 - 2022
Trang 2Mục lục
Chương 1 Kiến thức nền tảng 1
1.1 Elasticsearch: 1
1.1.1 Elasticsearch là gì? 1
1.1.2 Elasticsearch hoạt động như thế nào: 2
1.1.3 Các khái niệm cần biết về Elasticsearch 2
1.1.3.1 Document 2
1.1.3.2 Index 3
1.1.3.3 Shard 3
1.1.3.4 Node 3
1.1.3.5 Cluster 3
1.1.4 Ưu nhược điểm của Elasticsearch 4
1.1.4.1 Ưu điểm 4
1.1.4.2 Nhược điểm 5
1.1.5 Cách cài đặt: 5
1.1.6 Các lệnh cơ bản để truy vấn trong Elasticsearch 6
1.1.6.1 Tạo một index 6
1.1.6.2 Chỉnh sửa, cập nhật tài liệu 6
1.1.6.3 Xoá tài liệu 6
1.1.6.4 Truy vấn tìm kiếm cơ bản 6
1.2 Kibana 7
1.3 Docker 7
1.3.1 Giới thiệu 7
1.3.2 Container 7
1.3.3 Khái niệm liên quan 8
1.4 MongoDB 9
1.4.1 Giới thiệu MongoDB 9
1.4.2 Một số câu lệnh cơ bản trên MongoDB 9
1.4.3 Ưu điểm của MongoDB 10
1.4.4 Nhược điểm của MongoDB 11
1.5 NodeJS 11
1.3.1 Giới thiệu 11
1.3.2 Những ứng dụng nên viết bằng Nodejs 11
Trang 31.7 Restful Api 12
1.7.2 Đặc điểm của Resful API 12
1.8 React JS 13
1.8.1 Lợi ích của việc sử dụng react js 13
Chương 2 Phát biểu bài toán 14
2.1 Các chức năng cơ bản 14
2.2 Kiến trúc tổng thể phần mềm 14
Kiến trúc tổng thể của phần mềm 14
Chương 3 Đặt tả yêu cầu: 15
3.1 Sơ đồ và CSDL 15
3.2 Đặc tả Use Case 18
Chương 4 Các giao diện của đề tài 23
4.1 Kibana 23
4.2 Studio 3T 24
4.3 Docker 24
4.4 Trang chủ 24
4.5 Trang admin 26
4.6 Chi tiết một sản phẩm 26
4.7 Giỏ hàng 27
4.8 Bộ lọc sản phẩm 28
4.9 Đăng nhập 28
4.10 Đăng ký 29
Tài liệu tham khảo 30
Mục lục hình ảnh
Hình 1 1 Sơ đồ hoạt động của Elasticsearch 2Hình 1 2 Cách hoạt động của Elasticseach 4
Hình 1 3 Giao diện kibana 7
Hình 3 1 Sơ đồ giao tiếp của hệ thống 15
Hình 3 2 Cơ sở dữ liệu của dự án 17
Hình 3 3 Sơ đồ usecase 18
Hình 4 1 Giao diện dev tool của kibana 23
Hình 4 2 Giao diện chính của Studio 3T 24
Hình 4 3 Giao diện chính của docker desktop 24
Trang 4Hình 4 4 Giao diện chính trang web 26
Hình 4 5 Giao diện chính trang admin 26
Hình 4 6 Giao diện chi tiết của sản phẩm 27
Hình 4 7 Giao diện chi tiết của sản phẩm 27
Hình 4 8 Giao diện bộ lọc sản phẩm 28
Hình 4 9 Giao diện đăng nhập 28
Hình 4 10 Giao diện đăng ký tài khoản 29
Trang 5NHIỆM VỤ ĐỀ TÀI
1 Nội dung và các yêu cầu cần giải quyết trong báo cáo môn học
o Lập trình NodeJS, ReactJS, Express Framework
o Công cụ tìm kiếm Elasticsearch
o Hệ quản trị cơ sở dữ liệu MongoDB
o Kết nối NodeJS, Elasticsearch với MongoDB
2 Các tài liệu, số liệu cần thiết
Sử dụng số liệu thực tế thu thập trên mạng internet
Trang 6Elasticsearch cung cấp cho người dùng một hệ thống tìm kiếm dạng phân tán, phù hợp
với tệp dữ liệu lớn Elasticsearch thường được sử dụng trong việc tìm kiếm đơn giản trên trang web, chỉ mục và thu thập dữ liệu, cho đến phân tích và trực quan hóa dữ liệu kinh doanh
Elasticsearch thường hoạt động với các thành phần khác trong ELK
Stack, Logstash và Kibana, trong đó đóng vai trò lập chỉ mục dữ liệu
Trang 71.1.2 Elasticsearch hoạt động như thế nào:
Hình 1 1 Sơ đồ hoạt động của Elasticsearch
Về cơ bản, Elasticsearch hoạt động như một Cloud Server có khả năng tìm kiếm thông qua
cơ chế RESTful Trong đó, người dùng tạo ra các HTTP Request và dữ liệu dạng JSON, sau đó nhập vào Elasticsearch Các dữ liệu này đều được đánh Index (Chỉ mục), giúp đem lại hiệu quả tìm kiếm rất cao
Đầu tiên, dữ liệu được đưa vào Elasticsearch từ nhiều nguồn khác nhau, sau đó được phân tích, xử lý, trong quá trình nhập liệu Tiếp theo, dữ liệu được phân loại và chỉ mục, được đẩy lên Server Elasticsearch Cuối cùng, người dùng có thể tạo các truy vấn phức tạp và lấy dữ liệu được trả về từ server Elasticsearch
1.1.3 Các khái niệm cần biết về Elasticsearch
1.1.3.1 Document
Document là thông tin cơ bản được lập chỉ mục trong Elasticsearch, là đơn vị lưu
trữ dữ liệu nhỏ nhất trong Elasticsearch Document có thể là văn bản, hoặc có thể
là bất kỳ dạng cấu trúc dữ liệu nào được mã hóa bằng JSON như số, chuỗi, ngày
tháng,…
Trang 8Mỗi Document có một ID duy nhất cho một kiểu dữ liệu duy nhất Ví dụ, một
Document có thể đại diện cho một bài báo bách khoa toàn thư
1.1.3.2 Index
Index (Chỉ mục) là tập hợp các tài liệu có đặc điểm liên quan về mặt logic Ví dụ:
Trong trang web của một sàn thương mại điện tử, bạn sẽ tìm thấy một Chỉ mục cho Khách hàng, một Chỉ mục cho Sản phẩm,… Chỉ mục được sử dụng để tìm kiếm, thêm mới hoặc xóa các tài liệu trong đó
Một khái niệm trong Index mà bạn nên biết đó là Inverted Index (Chỉ mục đảo
ngược) Chỉ mục đảo ngược không lưu trữ trực tiếp các chuỗi mà chia từng tài liệu thành các cụm từ tìm kiếm riêng lẻ Nhờ đó, người dùng có thể tìm thấy các kết quả phù hợp nhanh chóng, kể cả trong các tệp dữ liệu với khối lượng lớn
1.1.3.3 Shard
Shard là tập con các Document của 1 Index, là đơn vị lưu trữ dữ liệu nhỏ nhất,
hoạt động ở mức thấp nhất Bằng cách phân phối Documents trong một Index trên
nhiều Shard, Elasticsearch có thể đảm bảo tính dự phòng, bảo vệ hệ thống khỏi lỗi
phần cứng và giúp tăng khả năng truy vấn khi hoạt động
Có 2 loại Shard là : Primary Shard và Replica Shard
• Primary Shard được lưu trữ dữ liệu và đánh Index, sau đó được vận chuyển
tới các Replica Shard
• Replica Shard là nơi lưu trữ dữ liệu nhân bản của Primary Shard, giúp đảm
bảo dữ liệu Primary Shard được toàn vẹn ngay cả khi hệ thống xảy ra vấn đề
1.1.3.4 Node
Node được coi là bộ phận “đầu não” của Elasticsearch Đây là nơi lưu trữ dữ liệu
trực tiếp, đánh Index của Cluster và thực hiện các thao tác tìm kiếm dữ liệu Mỗi Node thường được định danh bằng 1 một cái tên duy nhất
1.1.3.5 Cluster
Trang 9Cluster là tập hợp các nodes hoạt động cùng với nhau Mỗi Cluster có một Node
chính được lựa chọn tự động, Node này có thể thay thế Một trong những lỗi sai
của các developer mới là định danh các Cluster trùng tên nhau, điều này sẽ gây lỗi
cho các Node Bạn nên lưu ý vấn đề này khi tiến hành setup
Hình 1 2 Cách hoạt động của Elasticseach
1.1.4 Ưu nhược điểm của Elasticsearch
1.1.4.1 Ưu điểm
• Tìm kiếm dữ liệu nhanh chóng: Điều này có được nhờ cơ chế hoạt động của
Elasticsearch thay vì tìm kiếm văn bản trực tiếp, nó tìm kiếm một Index Nó sử dụng cấu trúc Document thay vì bảng và lược đồ
• Khả năng phân phối mở rộng: Bản chất phân tán của Elasticsearch giúp
người dùng mở rộng quy mô lên hàng trăm, hàng nghìn máy chủ và xử lý hàng petabyte dữ liệu
• Đơn giản hóa hiển thị và báo cáo dữ liệu: Elasticsearch cho phép tích hợp
với Beats và Logstash, giúp người dùng dễ dàng xử lý dữ liệu trước khi đưa vào Elasticsearch Ngoài ra, khả năng trực quan hóa giao diện giúp truy cập dữ liệu một cách nhanh chóng
Trang 10• Tính năng vượt trội: Elasticsearch cung cấp một số tính năng vượt trội cho
phép người dùng lưu trữ và tìm kiếm dữ liệu hiệu quả như cuộn dữ liệu và quản lý vòng đời Index
• Ngoài ra, Elasticsearch cũng hỗ trợ dữ liệu từ Java, PhP, Javascript, NET, Python, giúp người dùng dễ dàng hơn trong quá trình sử dụng và chuyển đổi
1.1.4.2 Nhược điểm
• Elasticsearch được thiết kế chủ yếu cho việc search dữ liệu, do vậy yếu thế hơn
so với các database khác về các mục đích ngoài search
• Elasticsearch không thích hợp với những hệ thống thường xuyên cập nhật dữ liệu
1.1.5 Cách cài đặt:
Bước 1: Sử dụng docker để cài đặt:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.1 container_name: elasticsearch
restart: always environment:
- http.cors.allow-credentials=true ulimits:
memlock:
Trang 11soft: -1 hard: -1 nofile:
soft: 65536 hard: 65536 cap_add:
- IPC_LOCK volumes:
- elasticsearch-data:/Users/duyettranminh/Desktop/elasticsearch/data ports:
- 9200:9200
Bước 2: Chạy lên docker-compose up để build server
1.1.6 Các lệnh cơ bản để truy vấn trong Elasticsearch
1.1.6.1 Tạo một index PUT /<tên index>
1.1.6.2 Chỉnh sửa, cập nhật tài liệu PUT /<tên index>/_doc/1?pretty {
"name": "index-1", "age": "20"
} 1.1.6.3 Xoá tài liệu DELETE /<tên index>
1.1.6.4 Truy vấn tìm kiếm cơ bản GET /<tên index>/_search {
"query": { "match": { "account_number": 20 } } }
Trang 121.2 Kibana
Kibana là một nền tảng phân tích hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử dụng,Kibana cũng là một công cụ mã nguồn mở miễn phí, cho tất cả mọi người sử dụng Kibana cung cấp các tính năng cho người dùng quản lý như biểu đồ cột, biểu đồ đường, biểu đồ tròn, biểu đồ nhiệt và nhiều loại chart khác nữa
Hình 1 3 Giao diện kibana
1.3 Docker
1.3.1 Giới thiệu
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ
dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa) Ban đầu viết bằng Python, hiện tại đã chuyển sang Golang
1.3.2 Container
Các containers cho phép lập trình viên đóng gói một ứng dụng với tất cả các phần cần thiết, chẳng hạn như thư viện và các phụ thuộc khác, và gói tất cả ra dưới dạng một package Bằng cách đó, nhờ vào container, ứng dụng sẽ chạy trên mọi máy Linux khác bất kể mọi cài đặt tùy chỉnh mà máy có thể có khác với máy được sử dụng để viết code
Trang 13Theo một cách nào đó, Docker khá giống virtual machine Nhưng tại sao Docker lại phát triển, phổ biến nhanh chóng? Đây là những nguyên nhân:
• Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys admin…
nó tận dụng lợi thế của container để build, test nhanh chóng Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud… Câu thần chú là “Build once, run anywhere”
• Tốc độ: Docker container rất nhẹ và nhanh, bạn có thể tạo và chạy docker container
trong vài giây
• Môi trường chạy và khả năng mở rộng: Bạn có thể chia nhỏ những chức năng của ứng
dụng thành các container riêng lẻ Ví dụng Database chạy trên một container và Redis cache
có thể chạy trên một container khác trong khi ứng dụng Node.js lại chạy trên một cái khác nữa Với Docker, rất dễ để liên kết các container với nhau để tạo thành một ứng dụng, làm cho nó dễ dàng scale, update các thành phần độc lập với nhau
1.3.3 Khái niệm liên quan
• Docker Engine : là thành phần chính của Docker, như một công cụ để đóng gói ứng dụng
• Docker Hub : là một “github for docker images” Trên DockerHub có hàng ngàn public images được tạo bởi cộng đồng cho phép bạn dễ dàng tìm thấy những image mà bạn cần
Và chỉ cần pull về và sử dụng với một số config mà bạn mong muốn
• Images: là một khuôn mẫu để tạo một container Thường thì image sẽ dựa trên 1 image
có sẵn với những tùy chỉnh thêm Ví dụ bạn build 1 image dựa trên image Centos mẫu có sẵn để chạy Nginx và những tùy chỉnh, cấu hình để ứng dụng web của bạn có thể chạy được Bạn có thể tự build một image riêng cho mình hoặc sử dụng những image được chia
sẽ từ cộng đồng Docker Hub Một image sẽ được build dựa trên những chỉ dẫn của Dockerfile
• Container: là một instance của một image Bạn có thể create, start, stop, move or delete container dựa trên Docker API hoặc Docker CLI
• Docker Client: là một công cụ giúp người dùng giao tiếp với Docker host
Trang 14• Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lý các đối tượng như Container, Image, Network và Volumes thông qua REST API Các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service
• Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một image
• Volumes: là phần dữ liệu được tạo ra khi container được khởi tạo
1.4 MongoDB
1.4.1 Giới thiệu MongoDB
MongoDB là hệ CSDL mã nguồn mở, là CSDL phi quan hệ hay còn gọi là NoSQL Relationship SQL hay còn gọi là Not only SQL) NoSQL được phát triển trên Javascript Framework với kiểu dữ liệu là JSON và dạng dữ liệu theo kiểu key và value NoSQL ra đời như là sự bổ sung cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ liệu quan hệ RDBMS (Relational Database Management System - Hệ quản trị cơ sở dữ liệu quan hệ) về tốc độ, tính năng, khả năng mở rộng Với NoSQL bạn có thể mở rộng dữ liệu
(None-mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc NoSQL
bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở rộng NoSQL được sử dụng ở rất nhiều công ty, tập đoàn lớn Ví dụ như FaceBook sử dụng Cassandra do FaceBook phát triển, Google phát triển và sử dụng BigTable MongoDB là một database hướng tài liệu (document), các dữ liệu được lưu trữ trong document kiểu JSON thay vì dạng bảng như CSDL quan hệ nên truy vấn sẽ rất nhanh
Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server ) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng ta sẽ dùng khái niệm là collection thay vì bảng So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng với row, MongoDB sẽ dùng các document thay cho row trong RDBMS
Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB
1.4.2 Một số câu lệnh cơ bản trên MongoDB
Trang 15Mục này so sánh một số câu lệnh giữa MongoDB và MySQL để làm nổi bật cách xử lý dữ liệu của MongoDB
INSERT INTO studetns ('name',
'gender') VALUES('thanh', 'male');
db.students.insert({ name:'thanh', gender: 'male'});
SELECT * FROM students WHERE
name = 'thanh'; db.students.find({ name: 'thanh' });
1.4.3 Ưu điểm của MongoDB
• Do MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một
collection sẽ có các kích cỡ và các document khác nhau, linh hoạt trong việc lưu trữ dữ liệu, do đó việc chèn thêm dữ liệu vào không bị hạn chế
• Dữ liệu trong MongoDB không bị ràng buộc như cơ sở dữ liệu quan hệ, không kết nối
Do đó, khi bổ sung, xóa hay cập nhật sẽ không bị mất thời gian kiểm tra xem có thỏa mãn các ràng buộc dữ liệu như trong RDBMS
• MongoDB rất dễ mở rộng Trong MongoDB có một khái niệm cụm dữ liệu (cluster), là
cụm các node chứa dữ liệu giao tiếp với nhau, khi muốn mở rộng hệ thống ta chỉ cần thêm một node với vào cluster
Trang 16• Trường dữ liệu “_id” luôn được tự động đánh chỉ mục để tốc độ truy vấn thông tin đạt
hiệu suất cao nhất
• Khi có một truy vấn dữ liệu, các bản ghi được ghi tạm thời lên bộ nhớ Ram, để phục vụ các truy vấn tiếp theo, vì vậy sự xử lý cũng diễn ra nhanh hơn mà không cần phải đọc lại
từ ổ cứng
• Hiệu năng cao: Tốc độ truy vấn (find, update, insert, delete) của MongoDB nhanh hơn hẳn so với các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Với một lượng dữ liệu đủ lớn khi thử nghiệm cho thấy tốc độ insert của MongoDB có thể nhanh tới gấp 100 lần so với MySQL
1.4.4 Nhược điểm của MongoDB
Hệ quản trị cơ sở dữ liệu MongoDB có nhiều ưu điểm, tuy nhiên cũng có một số nhược điểm MongoDB không có các tính chất ràng buộc như trong RDBMS nên khi thao tác với MongoDB thì chuyên gia phải tự xử lý các mối quan hệ giữa các dữ liệu Bộ nhớ lưu trữ bị tăng, do dữ liệu lưu dưới dạng key-value, các bộ dữ liệu chỉ khác về giá trị do đó các Khóa
sẽ bị lặp lại MongoDB cũng không hỗ trợ liên kết nên dữ liệu bị dư thừa Một điều nữa, khi insert/update/remove bản ghi, MongoDB sẽ chưa cập nhật ngay xuống ổ cứng, mà sau một khoảng thời gian 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống thiết bị lưu trữ, điều này sẽ có nguy cơ bị mất dữ liệu khi xảy ra các tình huống như mất điện
1.5 NodeJS
1.3.1 Giới thiệu
NodeJS là một platform mới, xây dựng trên Chrome Javascript Runtime (V8) nhằm phát triển các ứng dụng phía máy chủ nhanh chóng và dễ mở rộng Một số điểm mạnh của NodeJS:
1.3.2 Những ứng dụng nên viết bằng Nodejs
Rõ ràng, không phải cứ hot và mới là Nodejs làm gì cũng tốt, ví dụ như một ứng dụng cần tính ổn định cao, logic phức tạp thì các ngôn ngữ PHP hay Ruby vẫn là sự lựa chọn tốt hơn Còn dưới đây là những ứng dụng có thể và nên viết bằng Nodejs:
Trang 17• Fast File Upload ClientL: là các chương trình upload file tốc độ cao
• Ad Server: Các máy chủ quảng cáo
• Cloud Services: Các dịch vụ đám mây
• RESTful API: đây là những ứng dụng mà được sử dụng cho các ứng dụng khác thông qua API
• Any Real-time Data Application: bất kỳ một ứng dụng nào có yêu cầu về tốc độ thời gian thực Micro Services: Ý tưởng của micro services là chia nhỏ một ứng dụng lớn thành các dịch vụ nhỏ và kết nối chúng lại với nhau Nodejs có thể làm tốt điều này
1.6 Express
Express là một framework giành cho Nodejs Nó cung cấp cho chúng ta rất nhiều tính năng mạnh
mẽ trên nền tảng web cũng như trên các ứng dụng di động
Express hỗ rợ các phương thức HTTP và midleware tạo ra môt API vô cùng mạnh mẽ và dễ sử dụng Có thể tổng hợp một số chức năng chính của express như sau:
1.7 Restful Api
1.7.1 Giới thiệu RestFul API
API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML
REST: REST là viết tắt của REpresentational State Transfer REST là tập hợp các hướng dẫn và kiến trúc sử dụng cho việc truyền dữ liệu REST áp dụng phổ biến cho các Web app, nhưng cũng hoàn toàn có thể sử dụng cho các phần mềm nói chung Vì thế RESTful API
là các API mà tuân theo các kiến trúc và quy tắc của REST
1.7.2 Đặc điểm của Resful API
• Nhất quán xuyên suốt các API
• Stateless existence
• Sử dụng HTTP status code khi có thể
• Sử dụng URL Endpoint có phân tầng logic