- vừa được xem lúc

[Phỏng vấn Backend]: Elasticsearch là gì?

0 0 9

Người đăng: Hiếu học code

Theo Viblo Asia

1. Giới thiệu

Elasticsearch là một search engine, dựa trên nền tảng Lucene, cho phép lưu trữ, tìm kiếm và phân tích dữ liệu thời gian thực với khả năng mở rộng cao.

2. Tại sao sử dụng Elasticsearch

2.1. Khả năng tìm kiếm mạnh mẽ

Elasticsearch cung cấp khả năng tìm kiếm toàn văn bản mạnh mẽ với các tính năng nâng cao như:

  • Response time chỉ tính bằng xx ms (near-realtime)
  • Fuzzy search: cho phép tìm kiếm gần đúng, hữu ích khi xử lý lỗi chính tả.
  • Highlighting: đánh dấu các từ khóa tìm kiếm trong kết quả.
  • Suggestions: đề xuất các từ khóa tương tự khi không tìm thấy kết quả chính xác.
  • Hỗ trợ các loại dữ liệu không gian địa lý như geo_point và geo_shape.
  • Cung cấp các queries đặc biệt như geo_distance và geo_bounding_box cho tìm kiếm dựa trên vị trí.
  • Có thể tùy chỉnh để xử lý các ngôn ngữ đặc biệt.

2.2. Khả năng mở rộng và hiệu suất cao

  • Kiến trúc phân tán cho phép mở rộng dễ dàng theo chiều ngang.
  • Được thiết kế để xử lý hàng tỷ bản ghi với độ trễ thấp.

3. Cơ chế hoạt động của Elasticsearch

3.1. Apache Lucene và sự khác biệt

Elasticsearch được xây dựng trên nền tảng Apache Lucene - một thư viện tìm hỗ trợ tìm kiếm toàn văn. Nhưng apache sinh ra với nhiều hạn chế, và elasticsearch sinh ra để giải quyết vấn đề đó:

  • Lucene:

    • Thư viện Java thuần túy
    • Tập trung vào chức năng tìm kiếm cốt lõi
  • Elasticsearch:

    • Cung cấp API RESTful
    • Hệ thống phân tán, có khả năng mở rộng cao
    • Dễ dàng triển khai và quản lý cluster
    • Cung cấp các tính năng bổ sung như aggregations, machine learning

3.2. Cơ chế hoạt động

Inverted Index

Inverted Index là cấu trúc dữ liệu cốt lõi cho phép Elasticsearch thực hiện tìm kiếm full-text nhanh chóng. Cách inverted index được tổ chức (từ từ khoá -> danh sách documents)

Hãy tưởng tượng inverted index giống như mục lục ở một cuốn sách. Thay vì liệt kê các chương, nó liệt kê các từ quan trọng và số trang mà chúng xuất hiện.

Tokenization:

Tokenization là quá trình tách văn bản thành các đơn vị nhỏ hơn, gọi là token. Mỗi token thường là một từ hoặc cụm từ, và quá trình này là bước quan trọng trong việc phân tích văn bản để lập chỉ mục hoặc tìm kiếm. Quá trình phân tích sẽ gồm các bước sau:

  1. Tokenization: Chia văn bản thành các tokens.
  2. Normalization: Chuyển đổi tokens thành dạng chuẩn hóa (ví dụ: lowercase).
  3. Indexing: Lưu trữ các tokens và liên kết chúng với documents.

Thuật toán chấm điểm (Scoring Algorithm)

Elasticsearch sử dụng các thuật toán chấm điểm để xác định độ liên quan của kết quả tìm kiếm:

TF-IDF (Term Frequency-Inverse Document Frequency):
  • Term Frequency: Số lần xuất hiện của term trong document.
  • Inverse Document Frequency: Đánh giá tầm quan trọng của term trong toàn bộ corpus.
BM25 (Okapi BM25):
  • Cải tiến của TF-IDF, xem xét độ dài của document.
Tùy chỉnh scoring:
  • Sử dụng function_score query để áp dụng các hàm boost tùy chỉnh.
  • Áp dụng field-level boosting để ưu tiên các trường quan trọng.

5. So sánh Elasticsearch với cơ sở dữ liệu truyền thống

Để hiểu rõ hơn về sức mạnh của Elasticsearch, hãy so sánh nó với PostgreSQL trong một trường hợp tìm kiếm cụ thể:

Ví dụ: Tìm kiếm từ khóa "bút chì" trong danh sách sản phẩm

Id name description
1 cậu bé bút chì màu Truyện tranh
2 chiếc bút chì kim đồ dùng học tập
3 shin truyện tranh về shin cậu bé bút chì mới nhất

Tìm kiếm trong PostgreSQL:

SELECT * FROM product
WHERE name ILIKE '%bút chì%' OR description ILIKE '%bút chì%';

Quá trình xử lý:

  1. PostgreSQL sẽ quét qua toàn bộ bảng product (full table scan), trừ khi có index phù hợp. (Giả sử bạn đánh index b-tree thì khúc này toang)
  2. Với mỗi row, nó sẽ kiểm tra xem chuỗi "bút chì" có xuất hiện trong trường name hoặc description không.
  3. Việc sử dụng ILIKE với wildcard ở cả hai đầu (%...%) ngăn cản việc sử dụng index hiệu quả, ngay cả khi có.
  4. Thời gian xử lý tăng tuyến tính với số lượng records trong bảng. Ưu điểm:
  • Đơn giản, dễ implement
  • Chính xác cho exact substring matching Nhược điểm:
  • Chậm với dữ liệu lớn
  • Không hỗ trợ tốt cho tìm kiếm ngôn ngữ tự nhiên (ví dụ: không xử lý được từ đồng nghĩa, gần nghĩa)
  • Không có scoring mechanism để sắp xếp kết quả theo độ liên quan

Tìm kiếm trong Elasticsearch:

{ "query": { "multi_match": { "query": "bút chì", "fields": ["name", "description"], "type": "best_fields" } }
}

Quá trình xử lý:

  1. Elasticsearch sử dụng inverted index để nhanh chóng định vị các documents chứa từ "bút" và "chì".
  2. Nó áp dụng các kỹ thuật xử lý ngôn ngữ tự nhiên:
    • Tokenization: tách "bút chì" thành ["bút", "chì"]
    • Normalization: chuyển về dạng chuẩn (ví dụ: lowercase)
    • Có thể áp dụng stemming/lemmatization nếu được cấu hình
  3. Tìm kiếm các documents chứa cả "bút" và "chì" trong name hoặc description.
  4. Tính toán relevance score cho mỗi kết quả.
  5. Trả về kết quả đã được sắp xếp theo relevance score, ngay cả khi trong text có "cây bút chì màu" hoặc "bút và chì"

6. Các trường hợp sử dụng phổ biến của Elasticsearch

Elasticsearch có thể được áp dụng trong nhiều lĩnh vực khác nhau:

  • Full-text search: Tìm kiếm nhanh chóng trong lượng lớn dữ liệu văn bản.
  • Phân tích log: Tập trung và phân tích log từ nhiều nguồn khác nhau.
  • Metrics: Thu thập và visualize các metrics từ hệ thống và ứng dụng.
  • Security analytics: Phát hiện các mối đe dọa và anomalies trong dữ liệu bảo mật.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Elasticsearch là gì ?

. Lời nói đầu. Elasticsearch là gì .

0 0 35

- vừa được xem lúc

Backup và Restore Elasticsearch snapshot với AWS S3 trong Kubernetes

Ở công ty mình vừa có mấy task devops liên quan đến scaling, clustering Elasticsearch nên viết lại đề phòng sau này cần dùng. Có một task là chuyển dữ liệu từ single-node Elasticsearch cũ lên cluster mới.

0 0 50

- vừa được xem lúc

Reindex Elasticsearch data with zero downtime

Elasticsearch là một search engine tuyệt vời cho mọi dự án muốn áp dụng chức năng search cho sản phẩm của mình, với những tính năng như là near-realtime search, auto-complete, suggestion,.... Cùng với đó là lợi thế kiến trúc distributed search system, có thể dễ dàng scaling, failing handle. Khi muốn

0 0 40

- vừa được xem lúc

Fork you ElasticSearch! How Open Source Works

ElasticSearch recently dropped its open-source licensing strategy, prompting AWS to fork it. Learn how "Open Source" actually works and how companies profit from it.

0 0 48

- vừa được xem lúc

Tìm hiểu Text và Keyword trong Elasticsearch

Giới thiệu. Khi mình mới bắt đầu tìm hiểu về Elasticsearch mình không nghĩ rằng giữa kiểu dữ liệu Text và Keyword có sự khác nhau nhưng khi vào dự án thực tế mình mới nhận ra được sự khác biệt giữa 2

0 0 140

- vừa được xem lúc

Tìm hiểu và cài đặt Elasticsearch

Elasticsearch là gì. Elasticsearch cung cấp công cụ tìm tiếm và phân tích gần như là thời gian thực, áp dụng với mọi kiểu dữ liệu - văn bản có cấu trúc hoặc phi cấu trúc, số, thông tin địa lý.

0 0 113