1. 程式人生 > >FULLTEXT的索引 原因是單詞 “MySQL” 出現在至少全文的50%的行中。 因此, 它被列入停止字。

FULLTEXT的索引 原因是單詞 “MySQL” 出現在至少全文的50%的行中。 因此, 它被列入停止字。

MySQL支援全文索引和搜尋功能。MySQL中的全文索引型別FULLTEXT的索引。  FULLTEXT 索引僅可用於 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語句的一部分被建立,或是隨後使用ALTER TABLE 或 CREATE INDEX被新增。

一些詞在全文搜尋中會被忽略:

◆ 任何過於短的詞都會被忽略。 全文搜尋所能找到的詞的預設最小長度為 4個字元。

◆ 停止字中的詞會被忽略。禁用詞就是一個像“the” 或“some” 這樣過於平常而被認為是不具語義的詞。存在一個內建的停止字, 但它可以通過使用者自定義列表被改寫。

詞庫和詢問中每一個正確的單詞根據其在詞庫和詢問中的重要性而被衡量。  通過這種方式,一個出現在許多檔案中的單詞具有較低的重要性(而且甚至很多單詞的重要性為零),原因是在這個特別詞庫中其語義價值較低。反之,假如這個單詞比較少見,那麼它會得到一個較高的重要性。然後單詞的重要性被組合,從而用來計算該行的相關性。

這項技術最適合同大型詞庫一起使用 (事實上, 此時它經過仔細的調整 )。對於很小的表,單詞分佈並不能充分反映它們的語義價值, 而這個模式有時可能會產生奇特的結果。例如, 雖然單詞 “MySQL” 出現在文章表中的每一行,但對這個詞的搜尋可能得不到任何結果:

mysql> SELECT * FROM articles
  -> WHERE MATCH (title,body) AGAINST (‘MySQL’);
  找不到搜尋的詞(0.00 秒)

這個搜尋的結果為空,原因是單詞 “MySQL” 出現在至少全文的50%的行中。 因此, 它被列入停止字。對於大型資料集,使用這個操作最合適不過了----一個自然語言問詢不會從一個1GB 的表每隔一行返回一次。對於小型資料集,它的用處可能比較小。

一個符合表中所有行的內容的一半的單詞查詢相關文件的可能性較小。事實上, 它更容易找到很多不相關的內容。我們都知道,當我們在因特網上試圖使用搜索引擎尋找資料的時候,這種情況發生的頻率頗高。可以推論,包含該單詞的行因其所在特別資料集 而被賦予較低的語義價值。 一個給定的詞有可能在一個數據集中擁有超過其50%的域值,而在另一個數據集卻不然。

當你第一次嘗試使用全文搜尋以瞭解其工作過程時,這個50% 的域值提供重要的蘊涵操作:若你建立了一個表,並且只將文章的1、2行插入其中, 而文中的每個單詞在所有行中出現的機率至少為  50% 。那麼結果是你什麼也不會搜尋到。一定要插入至少3行,並且多多益善。需要繞過該50% 限制的使用者可使用布林搜尋程式碼。