Elasticsearch là gì? Giới thiệu về Elasticsearch
Elasticsearch có lẽ là thứ không phải xa lạ gì với anh em developer cũng như anh em bên System chúng ta. đặc biệt là những anh em làm trong mảng Big data. Nhưng không phải ai cũng hiểu rõ ràng và cụ thể về Elasticsearch. Ngày hôm nay Tuanvd.com xin phép trình bày một số khái niệm cơ bản nhất mà bạn cần phải biết trước khi tiến tới cài đặt, cấu hình cũng như sử dụng Service này!
Elasticsearch là search engine (lõi/máy tìm kiếm) dựa trên Lucene. Nó cung cấp khả năng full-text search với giao thức http và dữ liệu JSON. Elasticsearch được phát triển trên Java và là mã mở. Elasticsearch là search engine doanh nghiệp phổ biến nhất, tiếp theo là Apache Solr (cũng dựa trên Lucene)

Tóm lại:
Elasticsearchlà mộtsearch engine.Elasticsearchđược kế thừa từLucene ApacheElasticsearchthự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 RESTfulElasticsearchcó khả năng phân tích và thống kê dữ liệuElasticsearchchạ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 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ả.Elasticsearchlà 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.Elasticsearchlà 1open sourceđược phát triển bằngJava
Một số ông lớn đang sử dụng Elasticsearch:
- Wikimedia
- Athenahealth
- Adobe Systems
- StumbleUpon Mozilla,
- Amadeus IT Group
- Quora
- Foursquare
- Etsy
- SoundCloud
- GitHub
- FDA
- CERN
- Stack Exchange
- Center for Open Science
- Reverb
- Netflix
- Pixabay
- Motili
- Sophos
- Slurm Workload Manager
Elasticsearch có thể tìm kiếm tất cả các dữ liệu. Nó cung cấp khả năng search mở rộng, gần như tức thì, và hỗ trợ đã lưu trữ (multitenancy). Elasticsearch được phân chia, có nghĩa là chỉ số có thể chia thành những đoạn (shard) và mỗi đoạn có hoặc không có một hoặc nhiều bản sao. Mỗi nút (node) tổ chức một hoặc nhiều đoạn và hoạt động điều phối để các hoạt động đúng với các đoạn cần thiết. Cân bằng tải và định tuyết được hoạt động tự động.
Elasticsearch dùng Lucene và cố gắng phát huy hết tính năng thông qua JSON và Java API. Nó hỗ trợ facetting (mài) và percolating (thấm) có thể hữu ích cho thông báo nếu dữ liệu phù hợp với các truy vấn đăng ký (registered queries).
Một tính năng khác được gọi là gateway (cổng vào) và xử lý sự tồn tại lâu dài của chỉ số (index). Ví dụ, index số có thể được khôi phục từ gateway trong trường hợp máy chủ bị hỏng hóc. Elasticsearch hỗ trợ các yêu cầu GET thời gian thực, khiến nó phù hợp như một nơi lưu trữ NoSQL, nhưng nó thiếu các giao dịch phân tán (distributed transactions)

Các khái niệm cần biết
1, Document
Document là một JSON object với một số dữ liệu. Đây là basic information unit trong ES. Hiểu 1 cách cơ bản thì đây là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch.
2, Index
Index có lẽ là 1 khái niệm quá quen thuộc đối với các anh em dùng Mysql rồi. Khi đọc đến đây có lẽ ae đã thừa hiểu chức năng của index là gì rồi. Tuy nhiên nếu các bạn nghĩ rằng index trong ES hoàn toàn giống trong Mysql thì các bạn nhầm rồi nhé !
Trong Elasticsearch , sử dụng một cấu trúc được gọi là inverted index . Nó được thiết kế để cho phép tìm kiếm full-text search. Cách thức của nó khá đơn giản, các văn bản được phân tách ra thành từng từ có nghĩa sau đó sẽ đk map xem thuộc văn bản nào. Khi search tùy thuộc vào loại search sẽ đưa ra kết quả cụ thể.
Ví dụ : Chúng ta có 2 văn bản cụ thể như sau:
1,The quick brown fox jumped over the lazy dog 2,Quick brown foxes leap over lazy dogs in summer
Để tạo ra một inverted index, trước hết chúng ta sẽ phân chia nội dung của từng tài liệu thành các từ riêng biệt (chúng tôi gọi là terms), tạo một danh sách được sắp xếp của tất cả terms duy nhất, sau đó liệt kê tài liệu nào mà mỗi thuật ngữ xuất hiện. Kết quả như sau:
Term Doc_1 Doc_2 ------------------------- Quick | | X The | X | brown | X | X dog | X | dogs | | X fox | X | foxes | | X in | | X jumped | X | lazy | X | X leap | | X over | X | X quick | X | summer | | X the | X | ------------------------
Bây giờ, nếu chúng ta muốn tìm kiếm màu quick brown, chúng ta chỉ cần tìm trong các tài liệu trong đó mỗi thuật ngữ có xuất xuất hiện hay không. Kết quả như sau:
Term Doc_1 Doc_2 ------------------------- brown | X | X quick | X | ------------------------ Total | 2 | 1
Như các bạn đã thấy , cả 2 đoạn văn bản đều thích hợp với từ khóa. Tuy nhiên có thể dễ dàng nhận ra rằng Doc_1 chính xác hơn nhiều. Bạn hoàn toàn có thể setup việc tìm kiếm 1 cách kỹ càng hơn, tuy nhiên minh sẽ đề cập đến vấn đề này trong bài viết sau nhé. Nếu bạn có hứng thú có thể vào tài liệu https://www.elastic.co/guide/en/elasticsearch/guide/current/inverted-index.html và https://www.elastic.co/guide/en/elasticsearch/guide/current/relevance-intro.html#relevance-intro để có cái nhìn rõ ràng hơn .
3, Shard
Shardlà đối tượng củaLucene, là tập con cácdocumentscủa 1 Index. Một Index có thể được chia thành nhiều shard.- Mỗi
nodebao gồm nhiềuShard. Chính vì thếShardmà là đối tượng nhỏ nhất, hoạt động ở mức thấp nhất, đóng vai trò lưu trữ dữ liệu. - Chúng ta gần như không bao giờ làm việc trực tiếp với các
ShardvìElasticsearchđã support toàn bộ việc giao tiếp cũng như tự động thay đổi cácShardkhi cần thiết. - Có 2 loại
Shardlà :primary shardvàreplica shard.
3.1 : Primary Shard
Primary Shardlà sẽ lưu trữ dữ liệu và đánhindex. Sau khi đánh xong dữ liệu sẽ được vận chuyển tới cácReplica Shard.- Mặc định của
Elasticsearchlà mỗiindexsẽ có 5Primary shardvà với mỗiPrimary shardthì sẽ đi kèm với 1Replica Shard.
3.2 : Replica Shard
Replica Shardđúng như cái tên của nó, nó là nơi lưu trữ dữ liệu nhân bản củaPrimary ShardReplica Shardcó vai trò đảm bảo tính toàn vẹn của dữ liệu khiPrimary Shardxảy ra vấn đề.- Ngoài ra
Replica Shardcó thể giúp tăng cường tốc độ tìm kiếm vì chúng ta có thể setup lượngReplica Shardnhiều hơn mặc định củaES
Để hiểu hơn về Primary Shard hay Replica Shard mọi người có thể vào https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html để tìm hiểu rõ hơn. Trong bài này anh Long đã viết khá chi tiết về các khái niệm cũng như cách thức hoạt động lưu trữ và tìm kiểm của ES nên mình xin phép không nói thêm gì về phần này.
4, Node
- Là trung tâm hoạt động của Elasticsearch. Là nơi lưu trữ dữ liễu ,tham gia thực hiện đánh
indexcúaclustercũng như thực hiện các thao tác tìm kiếm - Mỗi
nodeđược định danh bằng 1 unique name
5, Cluster
- Tập hợp các
nodeshoạt động cùng với nhau, chia sẽ cùng thuộc tínhcluster.name. Chính vì thếClustersẽ được xác định bằng 1 \’unique name\’. Việc định danh cácclustertrùng tên sẽ gây nên lỗi cho các node vì vậy khi setup các bạn cần hết sức chú ý điểm này - Mỗi cluster có một
nodechính (master), được lựa chọn một cách tự động và có thể thay thế nếu sự cố xảy ra. Một cluster có thể gồm 1 hoặc nhiềunodes. Các nodes có thể hoạt động trên cùng 1 server . Tuy nhiên trong thực tế , mộtclustersẽ gồm nhiềunodeshoạt động trên các server khác nhau để đảm bảo nếu 1 server gặp sự cố thì server khác (node khác) có thể hoạt động đầy đủ chức năng so với khi có 2 servers. Cácnodecó thể tìm thấy nhau để hoạt động trên cùng 1 cluster qua giao thứcunicast.
Chức năng chính của Cluster đó chính là quyết định xem shards nào được phân bổ cho node nào và khi nào thì di chuyển các Cluster để cân bằng lại Cluster
Ưu nhược điểm của ES
Ưu điểm
- Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ dựa trên Apache Lucene ( near-realtime searching)
- Có khả năng phân tích dữ liệu (Analysis data)
- Khả năng mở rộng theo chiều ngang tuyệt “vòi”
- Hỗ trợ tìm kiếm mờ (fuzzy), tức là từ khóa tìm kiếm có thể bị sai lỗi chính tả hay không. Nếu đúng cú pháp thì vẫn có khả năng elasticsearch trả về kết quả tốt.
- Hỗ trợ Structured Query DSL (Domain-Specific Language ), cung cấp việc đặc tả những câu truy vấn phức tạp một cách cụ thể và rõ ràng bằng JSON.Các bạn có thể tìm hiểu thêm tại đây
- Hỗ trợ nhiều
Elasticsearcclient nhưJava,PhP,Javascript,Ruby,.NET,Python
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 ngoài search như CRUD, thì elastic kém thế hơn khi so với những database như Mongodb, Mysql…. Vậy nên 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.- Trong
elasticsearchkhông có khái niệmdatabase transaction, tức là nó sẽ không đảm bảo được toàn vẹn dữ liệu trong các hoạt độngInsert,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ếnelasticsearchkhô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.
Tồng kết.
Ở bài viết này Tuanvd.com đã đưa ra cái khái niệm cơ bản cần biết cho những bạn mới và có ý định tìm hiểu về Elasticsearch. Nhìn chung thì mình thấy rằng nó khá thú vị và mạnh mẽ và rất phù hợp với công việc tổng hợp và thống kê dữ liệu, đặc biệt là đối với những hệ thống lớn.
Bài viết có sử dụng tài liệu tham khảo tại một số trang web như: viblo.asia, techblog.vn. Ngoài ra cũng có sự tham khảo từ nhiều nguồn khác.





![[Lab 1.2] Cấu hình Active Directory trên Windows Server 2016](https://tuanvd.com/wp-content/uploads/2017/10/Configl-Active-Directory_featured-218x150.png)
![[Lab 1.1] Install Active Directory trên Windows Server 2016 Install Active Directory_featured](https://tuanvd.com/wp-content/uploads/2017/09/Install-Active-Directory_featured-218x150.png)


![[Direct Admin] Hướng dẫn tắt chức năng cảnh báo tấn công ‘brute force’ Tat-chuc-nang-canh-bao-tan-cong-Brute-force-tren-Directadmin](https://tuanvd.com/wp-content/uploads/2018/01/Tat-chuc-nang-canh-bao-tan-cong-Brute-force-tren-Directadmin-218x150.jpg)



![[vSphere 6.5] Hướng dẫn cài đặt VMware ESXi 6.5 với video và hình ảnh how to install and configuration vmware vSphere-6.5](https://tuanvd.com/wp-content/uploads/2017/10/how-to-install-and-configuration-vmware-vSphere-6.5-218x150.jpg)









