Full text search là gì

SQL có chức năng Index khôn cùng căn uống bản để tăng tốc độ câu lệnh, các tính năng này được sử dụng tiếp tục, làm việc đa số các bảng tài liệu. Đây là kỹ năng và kiến thức căn bạn dạng với đặc trưng để xuất bản các hệ thống lớn, những tài liệu hoặc nhiều lượng truy vấn.

Việc tìm tìm nkhô giòn, thanh lọc tài liệu nkhô giòn gồm một số trong những phương thức tự cơ bản mang lại nâng cao, các thuật ngữ cơ phiên bản như sau: index, full text tìm kiếm, tìm kiếm engine. Trong đó Index, Fulltext search là phương pháp cơ phiên bản của Squốc lộ. Search Engine là 1 trong cách thức khác, sử dụng service riêng để cách xử lý dữ liệu, nhỏng Sphinx Search Engine, ElasticSearch...

Bạn đang xem: Full text search là gì

Bài viết này vẫn tiến hành phương thức cơ bản Index search với Fulltext tìm kiếm cùng với Squốc lộ.

Tải tệp tin Sample db Tại đây

DB này bao gồm 200.000 phiên bản ghi, đủ Khủng để kiểm soát biệt lập về tốc độ query.

Ta đã thực hiện các lệnh khám nghiệm tốc độ lệnh truy tìm vấn

*

Bảng bao gồm kết cấu như sau:

*

Ta đối chiếu tác dụng kiếm tìm tìm 2 trường text1 cùng text2 cùng với thuộc câu lệnhVới câu lệnh sau 2:

SELECT * FROM `cms_user1` WHERE text1 = "3..Trải sang một cuộc tang hải,"SELECT * FROM `cms_user1` WHERE text2 = "3..Trải qua một cuộc tang thương,"

Kết quả: thời hạn triển khai 2 lệnh tất cả sự khác hoàn toàn rõ: 0.0243 với 0.0089 , câu lệnh 2 nhanh khô vội vàng ngay sát 3 lần lệnh đồ vật nhất

Vậy nguyên nhân do đâu?

*

Giải thích: bảng bên trên đang thực hiện một tác vụ tạo nên chỉ mục (Index) trên trường text2 nhằm phục vụ tra cứu tìm nhanh khô, 

Cách chế tạo Index như sau: 

*
 
*

 

Sau khi tạo ra Index đến trường text2, ta sẽ có tác dụng lệnh query nkhô giòn hơn đáng kể.

Xem thêm: Tại Sao Không Để Điều Hoà Đầu Giường ? Có Nên Lắp Đặt Máy Lạnh Trên Đầu Giường

Đôi khi với những áp dụng Ít bản ghi, hoặc ít lượng truy cập đồng thời, thì ta sẽ không còn thấy sự khác hoàn toàn giữa tất cả Index hay không Index. Biểu hiện nay sinh sống thời gian câu lệnh triển khai cùng dẫn mang lại mua CPU sử dụng. Nên Việc tạo nên Index nlỗi bên trên chỉ thực sự thấy khác hoàn toàn hiệu quả với những cơ sở dữ liệu lớn gồm nhiều phiên bản ghi, tuyệt về tối ưu mang đến lượt truy vấn đôi khi lớn!Mở rộng: ta vẫn bình chọn tác dụng của Index cùng với từ khóa LIKE:

a1: SELECT * FROM `cms_user1` WHERE text1 LIKE "3..Trải qua một cuộc bể dâu%"a2: SELECT * FROM `cms_user1` WHERE text2 LIKE "3..Trải qua 1 cuộc bể dâu%"

b1: SELECT * FROM `cms_user1` WHERE text1 LIKE "%Trải qua một cuộc bể dâu%"b2: SELECT * FROM `cms_user1` WHERE text2 LIKE "%Trải qua 1 cuộc bể dâu%"

Và hiệu quả dường như "bất thường" nhỏng sau:

*

Tại lệnh LIKE này, 2 lệnh trên, a1, a2 trình bày hiệu quả bình thường: index cùng với text2 đến tốc độ giỏi rộng đối với text1 không tồn tại index.

Tuy nhiên với 2 lệnh bên dưới b1, b2, tốc độ ngang bằng. Vậy điều gì xẩy ra Khi text2 đã index, nhưng mà trường hợp này query lại ko hiệu quả hơn với text1. Và làm thế làm sao để về tối ưu trong trường vừa lòng này? Ngulặng nhân là vì nguyên tắc của Index, ta sẽ xem cách buổi giao lưu của Index.

Ngulặng lý buổi giao lưu của Index bảng dữ liệu:

Nguyên lý được nêu ra dễ dàng nắm bắt như sau: một quyển từ bỏ điển gồm các tự được sắp xếp dạng A->Z, lúc tra cứu giúp sẽ nhanh hao hơn không hề ít so với quyển từ điển những từ nhằm lộn xộn không theo một máy từ bỏ nào!ví dụ như, ta bao gồm bảng dữ liệu dụ sau, so sánh Việc đem tài liệu gồm Index và không tồn tại Index:

*

 

*

do đó, điểm biệt lập ở Index, vận động nlỗi tra từ điển.

Xem thêm: File Dsf Là Gì - Làm Thế Nào Để Mở Tập Tin

Rõ ràng, một quyển tự điển bao gồm các từ được thu xếp dạng A->Z, Lúc tra cứu vãn đã nkhô cứng rộng không ít đối với quyển từ bỏ điển các trường đoản cú nhằm lộn xộn không theo một vật dụng tự nào!

 

Trsinh hoạt lại vấn đề ở trên, tại sao 2 câu lệnh sau lại đã tạo ra thời gian Query tương tự như nhau, cho dù trường text2 đã có được index?

b1: SELECT * FROM `cms_user1` WHERE text1 LIKE "%Trải sang một cuộc bể dâu%"b2: SELECT * FROM `cms_user1` WHERE text2 LIKE "%Trải qua 1 cuộc bể dâu%"

Ở trên đây lại phát sinh một vấn tiếp sau, đó là câu query này không tồn tại chức năng với Index thông thường, bắt buộc tác dụng query với có với không tồn tại Index là đủng đỉnh như nhau

Câu lệnh trên gồm chân thành và ý nghĩa là: tìm kiếm chuỗi gồm chứa "Trải qua 1 cuộc bể dâu", nó hoàn toàn không giống cùng với câu lệnh: Tìm chuỗi ban đầu bằng "Trải qua 1 cuộc bể dâu". Rõ ràng, theo hình thức tra từ bỏ điển thông thường, thì kiếm tìm cần thiết áp dụng! Đơn giản do, Từ điển chỉ vận dụng cho ngôi trường tra cứu trường đoản cú "ban đầu bằng" , chứ không cần vận dụng cho từ gồm chứa một chuỗi trong đó!

Vậy làm thế nào để giải quyết tăng tốc đến lệnh query trên? (SELECT * FROM `cms_user1` WHERE text1 LIKE "%Trải sang 1 cuộc bể dâu%"). Điều này dẫn dắt ta mang lại một phương thức tiếp theo sau chính là FullText Search

Cơ chế vận động FullText search

Bảng Index Fulltext search tổ chức triển khai dạng như sau:

*

Để Index Fulltext search, ta theo các bước tương tự như nhỏng trên:

*

 

Và câu lệnh cũng rất được thay đổi, không còn ký kết từ ... LIKE %... như trên nữa, nhưng mà cú pháp nhỏng sau:

SELECT * FROM `cms_user1` WHERE MATCH(text2) AGAINST ("Trải qua một cuộc")

Ta đã chạy và so sánh với lệnh seach LIKE trên:

b2: SELECT * FROM `cms_user1` WHERE text2 LIKE "%Trải sang 1 cuộc%"

*

cũng có thể thấy lệnh cần sử dụng FullText tìm kiếm đang kết quả tốt hơn rõ nét, nkhô hanh rộng cấp khoảng chừng 10 lần đối với Search like thường thì trong trường đúng theo trên.

Kết luận: Vậy nên FullText Search đã xử lý tốt yêu cầu truy vấn vấn tìm tìm Text bên trong của bản ghi!

So sánh cùng với ngôi trường phù hợp Index với kiếm tìm tìm cùng với Like, cụ thể FullText tìm kiếm đã có mở rộng rộng, và tất nhiên nó vẫn tốn tài nguyên ổn lưu trữ (bảng index) đối với Index thông thường!


Chuyên mục: Hỏi Đáp