2013-05-16 40 views

回答

14

MySQL的自然語言全文檢索旨在匹配搜索查詢與語料庫以找到最相關的匹配。因此,假設我們有一篇文章包含「我愛餡餅」,並且有文檔d1,d2,d3(您的案例中的數據庫)。文件1和2分別關於體育和宗教,文件3關於食物。您的查詢,

SELECT * FROM articles WHERE MATCH(title,body)AGAINST('database'IN NATURAL LANGUAGE MODE);

將返回D3,然後D2,D1(d2的隨機順序,D1取決於哪個更平等的文章),因爲D3文章最佳匹配。

MYSQL使用的底層算法可能是tf-idf算法,其中tf代表術語頻率,idf代表逆文檔頻率。 tf就像它說的那樣,只是文章中的單詞w出現在A文檔中的次數。 idf基於單詞出現的數量。因此,在許多文件中出現的詞語並不能幫助決定最具代表性的文件。 tf * idf的結果產生一個分數,越高代表文檔就越好。所以'pie'只會出現在文檔d3中,因此會有很高的tf和較高的idf(因爲它是相反的)。而'''將會有很高的tf,但是會有一個低的idf,這將會導致tf和低分。

MYSQL自然語言模式還帶有一組停用詞(a,a,some等),並刪除少於4個字母的單詞。您可以在您提供的鏈接中看到。

一些詞在全文搜索被忽略:

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is three characters for 

InnoDB的搜索索引,或者四個字符對MyISAM。您可以通過在創建 索引之前設置配置選項來控制 截止點:innodb搜索的innodb_ft_min_token_size配置選項 索引或MyISAM的ft_min_word_len。

Words in the stopword list are ignored. A stopword is a word such as 「the」 or 「some」 that is so common that it is considered to have 

零語義值。有一個內置的停用詞列表,但它可以由用戶定義的列表覆蓋 。對於InnoDB搜索索引和 MyISAM,配置選項的停止詞列表和相關 配置選項是不同的。停止字處理由InnodDB搜索索引的配置 選項innodb_ft_enable_stopword,innodb_ft_server_stopword_table, 和innodb_ft_user_stopword_table控制,而對於MyISAM則選擇 ft_stopword_file。