Full text search là gì

Problem: Giả sử chúng ta không lưu giữ đúng mực cả câu đề nghị kiếm tìm tìm mà chỉ lưu giữ một số trong những tự trong câu đó thôi. Làm bí quyết nào để search được bạn dạng ghi đó ?

Ví dụ nuốm thể: Mình có 1 bảng articles

*
*

Tuy vẫn kiếm tìm kiếm được hiệu quả, tuy nhiên câu hỏi sử dụng Theo phong cách tìm kiếm vẫn vướng lại một số trong những giảm bớt như:

lúc ko đánh index thì tốc độ tra cứu kiếm chậm rãi.Hiệu suất không tốt.Xảy ra chứng trạng overload nếu tài liệu vượt dài hoặc vượt nhiều

Để giải quyết vấn đề bên trên MySquốc lộ đang hỗ trợ thêm MySQL Full Text Search

I. Full Text Search là gì ?

Kĩ thuật tìm kiếm toàn văn uống có thể chấp nhận được kiếm tìm kiếm các mẩu công bố khớp với cùng 1 chuỗi trên một hay là một số cột nhất mực.MySquốc lộ chỉ cung cấp FULLTEXT cho các thứ hạng dữ liệu CHAR, VARCHAR hoặc TEXT, hình trạng lưu trữ table đề nghị là MyISAM hoặc InnoDB (trường đoản cú phiên bạn dạng 5.6 new có)

1.2 Inverted indexĐiều làm nên sự khác biệt thân Full Text Search cùng những kinh nghiệm tìm kiếm thông thường đó là Inverted index

Là kinh nghiệm tấn công index theo đơn vị chức năng termNhằm mục đích bản đồ giữa các term cùng với những bạn dạng ghi chứa term đó.

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

Vậy vấn đề chế tạo index theo term như bên trên hữu ích cụ nào?Gỉa sử chúng ta bao gồm 3 chiếc dữ liệu: D1 = "This is first document"D2 = "This is second one"D3 = "One two"Inverted Index của 3 mẫu đó sẽ tiến hành lưu lại dưới dạng như sau:"this" => D1, D2"second" => D2"is" => D1, D2"one" => D2, D3"first" => D1"two" => D3"document" => D1lúc tìm kiếm cụm từ "This is first", cầm vị đề nghị tìm kiếm cụm từ bỏ này trong toàn bộ những cái, thì chỉ việc tra cứu kiếm những trường đoản cú này ở D1, D2Tóm lại, bạn cần lưu ý phần nhiều vấn đề sau thời điểm thao tác với full-text tìm kiếm vào MySQL:- Nếu cần sử dụng InnoDB thì độ lâu năm về tối tgọi cần tìm kiếm là 3.- MyISAM thì độ lâu năm tối tgọi là 4.lấy một ví dụ chúng ta kiếm tìm tự "and" hoặc "I" thì khoác định MySQL vẫn xác định đó là số đông từ bỏ bất nghĩa.Vì vào giờ đồng hồ Anh phần đa trường đoản cú có 3 chữ cái phần đông là bất nghĩa. Tuy nhiên, bạn có thể biến đổi độ lâu năm này bằng phương pháp msống tệp tin /etc/mysql/my.cnf và triển khai biến đổi giá trị:

Với InnoDB + innodb_ft_min_token_kích thước (độ dài buổi tối thiểu) + innodb_ft_max_token_form size (độ lâu năm buổi tối đa) Với MyISAM + ft_min_word_len (độ nhiều năm về tối thiểu) + ft_max_word_len (độ dài buổi tối đa)

Vậy loại tàng trữ table MyISAM và InnoDB khác biệt ra sao ?

*

II. Cách sử dụng Full Text Search2.1 Tạo Full Text Search ngay lúc chế tạo ra bảng Create Table

CREATE TABLE table_name( column_các mục, ..., FULLTEXT (column1,column2,..));2.2 Tạo Full Text Search vào lệnh Alter Table

ALTER TABLE table_nameĐịa chỉ cửa hàng FULLTEXT(column_name1, column_name2,…)2.3 Tạo Full Text Search bởi CREATE INDEX vào MySQL

CREATE FULLTEXT INDEX index_nameON table_name(idx_column_name,...)2.4 Xóa Index Full Text Search

ALTER TABLE table_nameDROPhường INDEX index_name;2.5 Cách áp dụng Full Text Search

CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body toàn thân TEXT,FULLTEXT (title,body)) ENGINE=InnoDB;INSERT INTO articles (title,body) VALUES("MySquốc lộ Tutorial","This database tutorial ..."),("How To Use MySQL","After you went through a ..."),("Optimizing Your Database","In this database tutorial ..."),("MySquốc lộ vs. YourSQL","When comparing databases ..."),("MySQL Security","When configured properly, MySQL ..."),("Database, Database, Database","database database database"),("1001 MySquốc lộ Tricks","1. Never run mysqld as root. 2. ..."),("MySQL Full-Text Indexes", "MySQL fulltext indexes use a ..");SELECT * FROM articles where MATCH (title,body) AGAINST ("database Tutorial")Trong đó: - Hàm MATCH chỉ ra đang search kiếm trên cột nào- Hàm AGAINST đã cho thấy biểu thức tìm kiếm (xuất xắc đó là nhiều từ bỏ tìm kiếm theo ngôn từ tự nhiên cơ mà người tiêu dùng nhập vào)Kết qủa :

*

III. Full Text Search functions3.1 Natural Language Full-Text SearchesĐể triển khai tìm tìm theo ngữ điệu tự nhiên, họ áp dụng nhị hàm MATCH() và AGAINST() . Hàm AGAINST() theo mang định đang nằm tại chế độ IN NATURAL LANGUAGE MODE. Chế độ sort mang định theo mức độ phù hợpĐược tính theo cách làm : w = (log(dtf)+1)/sumdtf * U/(1+0.0115*U) log((N-nf)/nf)Giải mê thích về phương pháp nlỗi sau: Nếu 1 từ khóa xuất hiện thêm các lần trong một phiên bản ghi thì điểm weight của trường đoản cú khóa đó sẽ tạo thêm cùng ngược trở lại trường hợp tự khóa mở ra trong vô số bạn dạng ghi thì điểm weight có khả năng sẽ bị sụt giảm.3.2 Boolean Full-Text SearchesTheo search tìm tự nhiên và thoải mái thì trong vnạp năng lượng bạn dạng chỉ việc xuất hiện một trong những đầy đủ từ bỏ mà ta đặt nó sinh sống đầu vào là đang trả tác dụng về. Tuy nhiên có một số trong những ngôi trường hợp mình muốn buộc phải mở ra tối thiểu 2 từ bỏ như thế nào kia thì bây giờ phải áp dụng những cơ chế MODE.Để thực hiện search kiếm toàn văn bản trong chế độ Boolean, chúng ta áp dụng nguyên tắc sửa đổi IN BOOLEAN MODE vào biểu thức AGAINST.lấy ví dụ như : Tìm kiếm bài viết bắt buộc phải bao gồm cả hai từ khóa mysql database

SELECT *FROM articlesWHERE MATCH(title, body) AGAINST( "+mysql +database" IN BOOLEAN MODE )

*
Các toán tử trong Boolean Full Text Searches

*

Các ví dụ sau minch họa cách sử dụng toán tử boolean vào truy vấn tìm kiếm kiếm:Để tìm kiếm kiếm các sản phẩm gồm cất tối thiểu 1 trong các nhì từ: “mysql” hoặc “tutorial”

"mysql tutorial"Để kiếm tìm kiếm các mặt hàng tất cả đựng cả nhì từ: “mysql” cùng “tutorial”

"+mysql +tutorial"Để search kiếm các mặt hàng tất cả đựng từ “mysql”, nhưng đặt dạng hình cao hơn cho những sản phẩm tất cả chứa “tutorial”:

"+mysql tutorial"Để tra cứu tìm những sản phẩm bao gồm đựng tự “mysql” tuy thế ko chứa từ bỏ “tutorial”

"+mysql -tutorial"Để kiếm tìm tìm các sản phẩm có đựng từ bỏ “mysql” và xếp hạng mặt hàng tốt rộng nếu như nó chứa từ “tutorial”.

"+mysql ~tutorial"Để tìm kiếm những mặt hàng gồm chứa các từ bỏ “mysql” cùng “tutorial” hoặc “mysql” với “training” theo ngẫu nhiên trang bị trường đoản cú như thế nào, tuy vậy hãy đặt những mặt hàng gồm đựng “mysql tutorial” cao hơn “mysql training”.

"+mysql +(>tutorial Để tìm kiếm các sản phẩm bao gồm chứa những trường đoản cú ban đầu bằng “my”, ví dụ như “mysql”, “mydatabase”, ..., các bạn áp dụng như sau:

"my*"Các đặc thù của Boolean Full Text Searches

Không tự động hóa thu xếp những hàng theo mức độ liên quan theo vật dụng từ bỏ bớt dầnĐể tiến hành những tróc nã vấn Boolean, các bảng InnoDB kinh nghiệm toàn bộ những cột của biểu thức MATCH phải bao gồm chỉ mục FULLTEXT (MyISAM ko yêu cầu)MySQL không cung cấp nhiều toán tử Boolean trên tầm nã vấn tìm kiếm bên trên các bảng InnoDB. lấy một ví dụ trường đoản cú "++ mysql" đã trả về một lỗi. Tuy nhiên, MyISAM thì lai khác, nó làm lơ những tân oán tử không giống cùng sử dụng toán tử sớm nhất. ví dụ như từ "+ -mysql" vẫn biến ‘ -mysql".Full Text Search của InnoDB không hỗ trợ dấu cộng (+) hoặc giấu trừ (-) vào trường đoản cú khóa tìm tìm, nó chỉ cung ứng nằm tại vị trí số 1 vì sẽ là những toán thù tử boolean. MySQL sẽ báo lỗi nếu như khách hàng tra cứu tìm trường đoản cú là "mysql +", hoặc "mysql-".

Xem thêm: Đề Thi Hsg Văn 7 Có Đáp Án Chi Tiết), Đề Thi Học Sinh Giỏi Môn Ngữ Văn Lớp 7 Có Đáp Án

3.3 Full-Text Searches with Query ExpansionThông thường, người dùng search tìm lên tiếng dựa trên con kiến ​​thức của mình. Họ thực hiện kinh nghiệm tay nghề của bản thân để lấy ra những từ bỏ khóa để kiếm tìm kiếm lên tiếng và thỉnh thoảng hồ hết từ bỏ khóa này thừa nđính thêm. Để giúp người tiêu dùng tìm kiếm thông báo dựa trên hầu như từ bỏ khóa quá nthêm này, chính sách Full Text Search MySquốc lộ trình làng một có mang Điện thoại tư vấn là không ngừng mở rộng truy hỏi vấn.MySQL full text tìm kiếm thực hiện công việc sau khi áp dụng không ngừng mở rộng truy vấn:

trước hết, tìm tìm toàn bộ những sản phẩm khớp cùng với tầm nã vấn kiếm tìm kiếm.Thđọng hai, kiếm tìm các tự tất cả tương quan vào tất cả những mặt hàng trường đoản cú công dụng kiếm tìm kiếm.Thứ bố, tìm kiếm kiếm lại dựa trên những từ bao gồm tương quan chũm vày những trường đoản cú khóa ban sơ được chỉ định vì người tiêu dùng.

ví dụ như : Tìm tìm theo ngữ điệu trường đoản cú nhiên:

SELECT *FROM articlesWHERE MATCH(title, body) AGAINST( "database" IN NATURAL LANGUAGE MODE );

*
Tìm kiếm msinh hoạt rộng

SELECT *FROM articlesWHERE MATCH(title, body) AGAINST("database" WITH QUERY EXPANSION)

*
Việc tra cứu kiếm mở rộng thỉnh thoảng sẽ ra được kết qủa người tiêu dùng mong ước, nhưng lại nó cũng là một trong cách để duy trì chân khách hàng ở lại. 3.4 ngram Full-Text ParserTrình phân tích cú pháp Full Text Search MySQL được tích vừa lòng sẵn áp dụng khoảng White thân những từ bỏ làm vết phân cách để xác xác định trí các tự ban đầu với kết thúc. Và nó sẽ là nhược điểm cùng với những ngữ điệu ko sử dụng lốt bí quyết nhỏng giờ Trung, giờ đồng hồ Hàn với giờ Nhật Để xử lý sự việc này, MySquốc lộ đã cung cấp trình so với cú pháp toàn văn uống ngram. Kể từ bỏ phiên phiên bản 5.7.6, MySquốc lộ sẽ bao gồm trình phân tích cú pháp toàn văn ngram như một plugin sever tích đúng theo, Tức là MySquốc lộ mua plugin này tự động hóa Khi máy chủ đại lý dữ liệu MySQL khởi hễ. MySquốc lộ cung cấp trình phân tích cú pháp toàn văn uống ngram cho tất cả luật lưu trữ InnoDB với MyISAM.Theo định nghĩa, ngram là 1 trong những chuỗi tiếp tục của một số ký kết tự xuất phát từ 1 chuỗi văn uống phiên bản. Chức năng chủ yếu của trình so sánh cú pháp toàn văn ngram là mã hóa một chuỗi vnạp năng lượng phiên bản thành một chuỗi n ký kết tự ngay tức khắc nhau.

n = 1: "m","y","s","q","l"n = 2: "my", "ys", "sq","ql" n = 3: "mys", "ysq", "sql"n = 4: "mysq", "ysql"n = 5: "mysql"Tạo chỉ mục FULLTEXT bởi trình so sánh cú pháp ngram. Để sản xuất chỉ mục FULLTEXT áp dụng trình so sánh cú pháp ngram, các bạn thêm WITH PARSER NGRAM vào câu lệnh CREATE TABLE, ALTER TABLE hoặc CREATE INDEX.ví dụ như : Bước 1: Tạo bảng posts. Thêm cột title với boby vào chỉ mục FULLTEXT thực hiện trình so với cú pháp ngram.

Xem thêm: Nên Chọn Mua Laptop Như Thế Nào Tốt Giữa Apple, Dell, Asus, Cách Chọn Mua Laptop Cho Dân Văn Phòng 2020

CREATE TABLE posts ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255), body toàn thân TEXT, FULLTEXT ( title , body ) WITH PARSER NGRAM) ENGINE=INNODB CHARACTER SET UTF8MB4;Cách 2:

SET NAMES utf8mb4;Cách 3:

INSERT INTO posts(title,body)VALUES("MySQL全文搜索","MySQL提供了具有许多好的功能的内置全文搜索"), ("MySQL教程","学习MySQL快速,简单和有趣");Bước 4: Để coi biện pháp ngram mã hóa văn bản, bạn áp dụng câu lệnh sau:

SET GLOBAL innodb_ft_aux_table="test/posts";SELECT * FROM information_schema.innodb_ft_index_cacheORDER BY doc_id , position;

*
Setting ngram token sizeNlỗi chúng ta cũng có thể thấy ví dụ bên trên, kích cỡ mã thông tin (n) vào ngram theo khoác định là 2. Để chuyển đổi kích thước mã thông báo, bạn thực hiện tùy lựa chọn thông số kỹ thuật ngram_token_size, có giá trị từ 1 cho 10.Tìm kiếm các từ bỏ vào trình phân tích cú pháp ngramVí dụ tra cứu kiếm nhiều trường đoản cú 搜索 vào bảng posts

SELECT id, title, bodyFROM postsWHERE MATCH (title , body) AGAINST ("搜索" );

*
3.5 MeCab Full-Text Parser PluginNgoài ngram, MySQL cung cấp plugin đối chiếu cú pháp toàn vnạp năng lượng MeCab dành riêng cho tiếng Nhật, mã hóa một chuỗi văn bạn dạng thành các tự tất cả nghĩa và cung ứng để áp dụng cùng với InnoDB với MyISAM.Ví dụ: MeCab mã hóa “デ ー タ ベ ー ス 管理” (“Quản lý cửa hàng dữ liệu”) thành “デ ー タ ベ ー ス” (“Trung tâm dữ liệu”) và “管理” (“Quản lý”).Ngoài vấn đề mã hóa vnạp năng lượng phiên bản thành những từ có nghĩa, chỉ mục MeCab thường xuyên nhỏ tuổi hơn chỉ mục ngram cùng search tìm toàn văn bản MeCab thường xuyên nhanh khô rộng. Một tiêu giảm là có thể mất nhiều thời gian hơn để trình so với cú pháp toàn văn uống MeCab mã hóa tư liệu so với trình phân tích cú pháp toàn vnạp năng lượng ngram.Để hiểu thêm cụ thể cùng phương pháp cài đặt plugin các chúng ta cũng có thể xem thông liên kết phía dẫn: https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-mecab.html

Tổng kết

Đây là phần trình làng chi tiết nhằm các chúng ta cũng có thể vậy được phần nào về Fulltext search tương tự như là cách tiến công index.


Chuyên mục: Kiến Thức