Bảng tìm kiếm mysql

Giả sử ta có 1 bảng dữ liệu khách hàng (có khoảng 10000 bản ghi). Bây giờ chúng ta muốn tìm 2000 khách hàng có mô tả bắt đầu bằng Queen

Câu lệnh quen thuộc mà chúng ta thường sử dụng.

composer create-project --prefer-dist laravel/laravel blog
0 Trước khi xem kết quả, chúng ta hãy xem hiệu năng của câu lệnh mang lại bằng cách thêm từ khóa EXPLAIN vào trước câu lệnh trên. Ta thấy kết quả như sau.
Bảng tìm kiếm mysql

Chú ý một vài cột trong bảng dữ liệu này như

  • loại. Tất cả (Sau khi thực hiện câu lệnh MySQL sẽ duyệt qua toàn bộ bản ghi để lấy dữ liệu - có thể hiển thị ở các cột hàng MySQL đã quét hơn 1M dữ liệu, nếu trong bảng có 10M, 100M thì chắc chắn sẽ rất mất thời gian)
  • Còn lại một số trường như
    • cái bàn. Bảng liên quan đến dữ liệu đầu ra
    • loại. Mức độ từ tốt nhất đến chậm nhất như sau. hệ thống, const, eq_ref, ref, phạm vi, chỉ mục, tất cả

Bài toán 2

  • Giả sử bạn không thể nhớ hết được cả câu cần tìm, mà chỉ nhớ được một số từ có trong câu thôi thì chúng ta sẽ làm thế nào để tìm được bản viết đó?

    Bảng tìm kiếm mysql

  • Câu trả lời của chúng ta là Không. Và còn rất nhiều mặt hạn chế của Search bình thường như

    • Khi không đánh index thì tốc độ tìm kiếm chậm
    • Không tìm thấy từ đồng nghĩa
    • Không thể tìm thấy các biến từ viết tắt phổ biến
    • No search way from as ví dụ trên
    • do error main description could not search
    • Sự cố khi tìm kiếm tiếng việt có dấu và không dấu. In the solution of problems on is MySQL đã hỗ trợ thêm MySQL Fulltext Search
II. Tìm kiếm toàn văn bản MySQL (FTS)
  • Tìm kiếm toàn văn là kỹ thuật tìm kiếm toàn văn cho phép tìm kiếm các thông tin khớp nối với một chuỗi hoặc một số cột nhất định
  • Toàn văn chỉ mục trong MySQL là một mục có kiểu FULLTEXT. Mục FULLTEXT chỉ được sử dụng với các bảng có thể được tạo ra từ các cột CHAR, VARCHAR, hoặc TEXT
  • Sử dụng cơ chế xếp hạng(dựa trên mức độ phù hợp của các tài liệu tìm thấy, tài liệu trả về càng phù hợp thì số thứ hạng càng cao)

2. 1 chỉ số đảo ngược

Điều làm nên sự khác biệt giữa FTS và các kỹ thuật tìm kiếm kỹ thuật thông thường chính là Inverted index

Inverted Index là 1 kỹ thuật lập chỉ mục trong cơ sở dữ liệu, một kỹ thuật quan trọng trong Fulltext Search. Thế Inverted Index là gì?

Inverted Index là một cấu trúc dữ liệu, có mục đích ánh xạ giữa các từ, chữ số và các tài liệu chứa chúng. better than

  • là kỹ thuật đánh chỉ mục theo thuật ngữ đơn vị
  • Bản đồ mục đích dịch chuyển giữa các thuật ngữ với các bản ghi chưa có thuật ngữ đó

Vì vậy, việc tạo chỉ mục theo thuật ngữ như trên có lợi thế nào?

Xin giả sử bạn muốn truy vấn cụm từ "Con, là, Nhà phát triển", thì thay vì công việc phải quét từng tài liệu một, bài toán tìm kiếm tài liệu chứa 3 thuật ngữ trên sẽ trở thành phép toán liên hợp của 3 tập hợp Để dễ hiểu, các bạn

    D1 = "Son is Developer"
    D2 = "Developer PHP"
    D3 = "Son is Developer and Student"

Chỉ số đảo ngược

    "Son" => {D1,D3}
    "is" => {D1, D3}
    "Developer" => {D1, D2, D3}
    "PHP" => {D2}
    "and" => {D3}
    "Student" => {D3}

Cách hoạt động. Đầu tiên hệ thống nó sẽ phân tách chuỗi tìm kiếm ra các từ Son, is, Developer. Sau đó sẽ tìm thấy trong inverted index và được các tập hợp như sau

{D1,D3}

{D1,D3}

{D1,D2,D3}

Truy vấn cụm từ “Con, là, Nhà phát triển” thì ta sẽ có biểu thức hợp. {D1,D3} hợp {D1,D3} hợp {D1, D2, D3} = {D1}

=> công việc tìm kiếm trở nên nhanh hơn nhiều thay vì công việc phải quét toàn bộ bảng để tìm ra tài liệu có chứa từ đó

FTS thực hiện

  • Để thực hiện được FTS chúng ta cần lưu ý về cách đánh chỉ mục Fulltext
  • Nếu đánh chỉ mục cho 2 cột thì khi tìm kiếm chúng ta cũng phải điền cả 2 cột
  • Thư tự đánh thế nào thì thứ tự tìm kiếm cũng phải vậy
  • Lưu ý. Toàn văn là trường hợp đặc biệt của chỉ mục đánh trong bảng Ví dụ như sau

Bảng tìm kiếm mysql

2. 2 Kỹ thuật Tìm kiếm Mờ

- Fuzzy Seach (tìm kiếm "mờ") là khái niệm chỉ dành cho kỹ thuật để tìm kiếm một xếp "gần giống" (vì thay "giống xếp") so với một xếp cho trước

So sánh chuỗi con

  • Nó giống như LIKE trong SQL. Giả sử như người dùng nhập vào xâu “framgia”, bạn có thể trả về những kết quả có chứa từ “framgia” như “framgia Vietnam”, “lap trinh vien framgia”

Khoảng cách Levenshtein

  • Khoảng cách Levenshtein là số bước ít biến nhất một xâu A thành xâu B thông qua 3 phép biến đổi
    • Add an character
    • Remove a character
    • Change a character

2. 3 Ở CHẾ ĐỘ BOOLEAN

  • Search theo từ khóa search search
  • Sử dụng toán từ ‘+’ hoặc ‘-’ để quyết định từ nào sẽ được trả về kết quả.
    Bảng tìm kiếm mysql

Bảng tìm kiếm mysql

2. 4 Mở rộng truy vấn

Bảng tìm kiếm mysql

MySQL sẽ thực hiện tìm kiếm 2 lần, trong lần tìm kiếm thứ 2 MySQL sẽ tìm kết hợp cụm từ tìm kiếm gốc với những từ thích hợp nổi bật so với từ gốc. Mặt khác đây chính là cái hay nhất trong tìm kiếm toàn văn

  • Finded from ĐỒNG NGHĨA
  • Find been from viết tắt
  • Sửa lỗi mô tả chính xác
  • Đánh lại trọng lượng

2. 5 Đánh chỉ số kiểu B-tree

- B-Tree là sự tự cân bằng (tự cân bằng), nghĩa là khi thêm hoặc xóa 1 nút thì cây sẽ có những hành động để đảm bảo chiều cao của cây càng thấp càng tốt. Mỗi nút cha có giá trị lớn hơn nút con này và nhỏ hơn nút con khác. Nó sẽ tìm con trỏ bên phải bằng cách nhìn vào dữ liệu ở các trang nút, các trang nút có chứa dữ liệu của các nút con

  • Cách đánh chỉ số. ALTER TABLE users ADD INDEX idx_description(description(5)), sau đó cũng sử dụng SHOW INDEX FROM TABLE để kiểm tra và ta được kết quả sau.
    Bảng tìm kiếm mysql

So sánh với câu tìm kiếm như lúc ban đầu, so sánh về tốc độ cũng như hiệu năng của câu lệnh sau khi được đánh chỉ mục.

Bảng tìm kiếm mysql

Về hiệu năng

Bảng tìm kiếm mysql

Chú thích

  • Các mục không nên được sử dụng trong các bảng nhỏ
  • Các mục không nên được sử dụng trên các cột chứa một lượng lớn giá trị NULL
  • Không nên sử dụng chỉ mục trên các cột mà thường xuyên bị sửa đổi (Chèn, Cập nhật…)
3. Áp dụng FTS với Scout và Algolia Packages

Bước 1. Cài đặt ứng dụng Laravel

composer create-project --prefer-dist laravel/laravel blog

Bước 2. Cài đặt gói

  1. ấu trùng/trinh sát

    composer create-project --prefer-dist laravel/laravel blog
    
    1

Sau khi chạy câu lệnh thành công, hãy mở tệp "config/app. php" và thêm nhà cung cấp dịch vụ

    'providers' => [
       Laravel\Scout\ScoutServiceProvider::class,
    ]

Chạy câu lệnh để tạo tập tin trinh sát. php trong thư mục cấu hình

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
  1. algolia/algoliasearch-client-php

    composer create-project --prefer-dist laravel/laravel blog
    
    2

Bước 3. Configure for Packages Time you open file. env và thêm id và sercet vào như dưới đây

________số 8

Bước 4. Model setting

    use Laravel\Scout\Searchable;
    use Illuminate\Database\Eloquent\Model;

    class Post extends Model
    {
       use Searchable;
    }

Bước 5. Configure index

    D1 = "Son is Developer"
    D2 = "Developer PHP"
    D3 = "Son is Developer and Student"
0

Bước 6. Đánh chỉ mục

    D1 = "Son is Developer"
    D2 = "Developer PHP"
    D3 = "Son is Developer and Student"
1

Bước 7. Truy vấn

    D1 = "Son is Developer"
    D2 = "Developer PHP"
    D3 = "Son is Developer and Student"
24. Kết luận

Đây là phần giới thiệu chi tiết để các bạn có thẻ ghim được các phần nào về Fulltext search cũng như cách đánh chỉ mục. Hiện nay có rất nhiều gói engine hỗ trợ tìm kiếm rất tốt như. Algolia (mất phí), elaticsearch. nhưng việc tìm hiểu trên MySQL vẫn có gì đó hay ho hơn