Full text search là gì

 - 

Problem: Giả sử bạn không ghi nhớ đúng chuẩn cả câu đề nghị search tìm nhưng mà chỉ ghi nhớ một trong những trường đoản cú trong câu đó thôi. Làm bí quyết như thế nào nhằm search được bạn dạng ghi kia ?

lấy một ví dụ thế thể: Mình có một bảng articles

*
*

Tuy vẫn tìm tìm kiếm được tác dụng, nhưng câu hỏi áp dụng Theo phong cách tìm kiếm vẫn để lại một trong những hạn chế như:

lúc không tiến công index thì vận tốc search tìm chậm chạp.Hiệu suất không cao.Xảy ra chứng trạng overload giả dụ tài liệu quá dài hoặc vượt nhiều

Để giải quyết vụ việc trên MySquốc lộ sẽ cung cấp thêm MySQL Full Text Search

I. Full Text Search là gì ?

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

1.2 Inverted indexĐiều làm nên sự khác biệt thân Full Text Search với các kinh nghiệm search thường thì đó là Inverted index

Là kinh nghiệm đánh index theo đơn vị termNhằm mục đích maps giữa các term với những bản ghi chứa term đó.

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

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

Với InnoDB + innodb_ft_min_token_size (độ dài buổi tối thiểu) + innodb_ft_max_token_kích cỡ (độ lâu năm tối đa) Với MyISAM + ft_min_word_len (độ lâu năm tối thiểu) + ft_max_word_len (độ dài về tối đa)

Vậy dạng hình lưu trữ table MyISAM với InnoDB khác nhau như thế nào ?

*

II. Cách áp dụng Full Text Search2.1 Tạo Full Text Search ngay trong lúc sản xuất bảng Create Table

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

ALTER TABLE table_nameShowroom FULLTEXT(column_name1, column_name2,…)2.3 Tạo Full Text Search bởi CREATE INDEX trong MySQL

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

ALTER TABLE table_nameDROP INDEX index_name;2.5 Cách thực hiện 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 MySQL 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 đã cho thấy sẽ kiếm tìm kiếm bên trên cột nào- Hàm AGAINST đã cho thấy biểu thức kiếm tìm tìm (tuyệt chính là cụm từ bỏ kiếm tìm tìm theo ngữ điệu tự nhiên mà lại 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Để thực hiện tìm kiếm kiếm theo ngôn ngữ tự nhiên và thoải mái, chúng ta sử dụng nhị hàm MATCH() với AGAINST() . Hàm AGAINST() theo mặc định đã nằm tại vị trí cơ chế IN NATURAL LANGUAGE MODE. Chế độ sort mặc định theo mức độ phù hợpĐược tính theo phương pháp : w = (log(dtf)+1)/sumdtf * U/(1+0.0115*U) log((N-nf)/nf)Giải thích về công thức như sau: Nếu 1 trường đoản cú khóa xuất hiện thêm nhiều lần trong 1 phiên bản ghi thì điểm weight của tự khóa đó sẽ tạo thêm với ngược trở lại nếu như từ khóa mở ra trong vô số phiên bản ghi thì điểm weight sẽ ảnh hưởng sụt giảm.3.2 Boolean Full-Text SearchesTheo tìm kiếm tìm tự nhiên thì trong văn bạn dạng chỉ việc xuất hiện thêm một trong những phần nhiều trường đoản cú mà lại ta đặt nó sinh hoạt đầu vào là đã trả công dụng về. Tuy nhiên tất cả một vài ngôi trường hòa hợp bạn muốn cần mở ra tối thiểu 2 trường đoản cú nào kia thì hôm nay bắt buộc sử dụng những chính sách MODE.Để tiến hành search kiếm toàn văn bản trong chính sách Boolean, bạn thực hiện nguyên tắc sửa đổi IN BOOLEAN MODE vào biểu thức AGAINST.Ví dụ : Tìm kiếm nội dung bài viết cần phải bao gồm cả nhì tự khóa mysql database

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

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

*

Các ví dụ sau minc họa cách áp dụng tân oán tử boolean trong tróc nã vấn kiếm tìm kiếm:Để kiếm tìm kiếm những mặt hàng bao gồm chứa tối thiểu một trong nhị từ: “mysql” hoặc “tutorial”

"mysql tutorial"Để tìm kiếm các sản phẩm có cất cả hai từ: “mysql” cùng “tutorial”

"+mysql +tutorial"Để tra cứu kiếm các mặt hàng có đựng từ bỏ “mysql”, nhưng mà đặt loại cao hơn cho các hàng bao gồm đựng “tutorial”:

"+mysql tutorial"Để tìm kiếm kiếm những sản phẩm gồm đựng tự “mysql” tuy vậy không đựng từ “tutorial”

"+mysql -tutorial"Để kiếm tìm kiếm những sản phẩm gồm cất từ “mysql” với xếp hạng mặt hàng phải chăng rộng trường hợp nó cất từ “tutorial”.

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

"+mysql +(>tutorial Để tìm kiếm các mặt hàng gồm đựng những từ bắt đầu bởi “my”, ví dụ như “mysql”, “mydatabase”, ..., bạn sử dụng nhỏng sau:

"my*"Các tính chất của Boolean Full Text Searches

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

Xem thêm: Cà Phê Nhân Là Gì - Các Loại Cà Phê Nhân Phổ Biến

3.3 Full-Text Searches with Query ExpansionThông thường, người dùng tra cứu tìm thông báo dựa vào con kiến ​​thức của mình. Họ thực hiện kinh nghiệm tay nghề của mình để đưa ra những trường đoản cú khóa nhằm tìm tìm biết tin với nhiều khi gần như từ bỏ khóa này thừa nlắp. Để giúp người dùng tìm đọc tin dựa vào hầu hết tự khóa thừa nthêm này, pháp luật Full Text Search MySQL reviews một khái niệm gọi là không ngừng mở rộng truy tìm vấn.MySQL full text search thực hiện quá trình sau khoản thời gian thực hiện không ngừng mở rộng tróc nã vấn:

trước hết, search kiếm toàn bộ các sản phẩm khớp với truy tìm vấn tìm kiếm tìm.Thđọng hai, tìm kiếm các từ bỏ bao gồm tương quan trong tất cả các sản phẩm tự hiệu quả search kiếm.Thứ ba, kiếm tìm kiếm lại dựa vào các từ bao gồm tương quan rứa vị những tự khóa thuở đầu được hướng đẫn vì người tiêu dùng.

ví dụ như : Tìm tìm theo ngôn ngữ từ nhiên:

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

*
Tìm kiếm mnghỉ ngơi rộng

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

*
Việc tra cứu kiếm không ngừng mở rộng đôi lúc sẽ ra được kết qủa người dùng ước muốn, tuy thế nó cũng là một phương pháp để giữ lại chân người sử dụng ngơi nghỉ lại. 3.4 ngram Full-Text ParserTrình đối chiếu cú pháp Full Text Search MySQL được tích hòa hợp sẵn áp dụng khoảng White giữa những tự làm vết phân cách để xác định vị trí các trường đoản cú ban đầu và xong. Và nó vẫn là nhược điểm với các ngữ điệu không áp dụng dấu giải pháp nlỗi tiếng Trung, tiếng Hàn cùng tiếng Nhật Để giải quyết và xử lý vấn đề này, MySquốc lộ đang hỗ trợ trình phân tích cú pháp toàn văn ngram. Kể từ bỏ phiên bạn dạng 5.7.6, MySQL sẽ bao gồm trình so với cú pháp toàn vnạp năng lượng ngram như một plugin sever tích phù hợp, Tức là MySQL cài đặt plugin này tự động Khi sever cửa hàng tài liệu MySquốc lộ khởi đụng. MySquốc lộ cung cấp trình đối chiếu cú pháp toàn văn ngram cho cả qui định tàng trữ InnoDB và MyISAM.Theo khái niệm, ngram là 1 chuỗi liên tục của một số ký từ bỏ từ 1 chuỗi vnạp năng lượng bạn dạng. Chức năng chính của trình so với cú pháp toàn văn ngram là mã hóa một chuỗi văn uố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ằng trình phân tích cú pháp ngram. Để chế tạo ra chỉ mục FULLTEXT sử dụng trình phân tích 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.lấy một ví dụ : Cách 1: Tạo bảng posts. Thêm cột title cùng boby vào chỉ mục FULLTEXT áp dụng trình so sánh cú pháp ngram.

Xem thêm: Bạn Không Biết Gì Về Chức Năng Shift Trên Ống Kính Tilt Shift Là Gì

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

SET NAMES utf8mb4;Cách 3:

INSERT INTO posts(title,body)VALUES("MySQL全文搜索","MySQL提供了具有许多好的功能的内置全文搜索"), ("MySQL教程","学习MySQL快速,简单和有趣");Cách 4: Để xem phương pháp ngram mã hóa văn uống bản, chúng ta thực hiện 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 sizeNhỏng bạn cũng có thể thấy ví dụ trên, size mã thông tin (n) vào ngram theo mặc định là 2. Để biến hóa kích thước mã thông báo, bạn sử dụng tùy chọn cấu hình ngram_token_size, có giá trị từ là một mang lại 10.Tìm kiếm cụm từ bỏ vào trình đối chiếu cú pháp ngramví dụ như search tìm cụm trường đoản cú 搜索 trong bảng posts

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

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

Tổng kết

Đây là phần reviews cụ thể để các chúng ta có thể cố kỉnh được phần như thế nào về Fulltext search cũng như là giải pháp tấn công index.