【轉】 Mysql全文搜索match...against的用法


原文鏈接 http://blog.csdn.net/manbujingxin/article/details/6656992

 

前提:mysql只支持英文內容的全文索引,所以只考慮英文的全文搜索。

假定數據表名為post,有三列:id、title、content。id是自增長序號,

title是varchar,content是text,給content添加全文索引。
mysql全文搜索有三種模式:
一、自然語言查找。這是mysql默認的全文搜索方式,sql示例:

1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword')


或者顯式聲明使用自然語言搜索方式

1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN NATURAL LANGUAGE MODE)


由於自然語言搜索方式是默認模式,所以可以省略聲明模式的“IN NATURAL LANGUAGE MODE”部分。
自然語言搜索模式的么特點:

  • 忽略停詞(stopword),英語中頻繁出現的and/or/to等詞被認為是沒有實際搜索的意義,搜索這些不會獲得任何結果。
  • 如果某個詞在數據集中頻繁出現的幾率超過了50%,也會被認為是停詞,所以如果數據庫中只有一行數據,不管你怎么全文搜索都不能獲得結果。
  • 搜索結果都具有一個相關度的數據,返回結果自動按相關度由高到低排列
  • 只針對獨立的單詞進行檢索,而不考慮單詞的局部匹配,如搜索box時,就不會將boxing作為檢索目標。


二、布爾查找。這種查找方式的特點是沒有自然查找模式中的50%規則,即便有詞語在數據集中頻繁出現的幾率超過50%,

也會被作為搜索目標進行檢索並返回結果,而且檢索時單詞的局部匹配也會被作為目標進行檢索。sql示例

1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE)


三、帶子查詢擴展的自然語言查找。

1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE WITH EXPANSION)


暫時沒有明白這種模式。
在我的實際使用中還發現了以下細節:

    • 布爾查找時必須指定返回結果的排序方式,它不會像自然語言查找那樣會自動將結果按相關度排序返回。
    • 即使是布爾查找,對長度小於等於3的單詞也不會進行檢索,因為mysql有一個系統變量FT_MIN_WORD_LE
      指定了全文檢索時可接受的最小單詞長度,默認值是4。.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM