2012-12-03 100 views
1

我們有一個全文索引設置用於在網站上搜索(mysql/php)。全文索引 - mysql

這些搜索大部分時間都很有用,但我們仍然遇到這些奇怪的錯誤。

例如:

1)本作品: 「中國鐵鍋」

2)這不: 「一鑊」

我的假設是,第二不工作,因爲: a)由於它只有3個字母,因此它會彈出'炒鍋' b)由於它在某些要忽略的單詞列表中,它會彈出'first'。

我的假設是否正確?

如果是這樣,我怎麼會去扭捏的事情都: 一)不知何故白名單「第一」作爲搜索 b儘管它是一個3個字母的單詞只有

使用)不知何故白名單「炒鍋」一個字

一如既往的感謝!

+0

你得到了什麼錯誤?在正常情況下,你的假設並不成立。 –

+1

您是否嘗試過修改最小全文長度:http://stackoverflow.com/questions/1585611/mysql-full-text-search-for-words-with-three-or-less-letters-這可能會忽略單詞即使您匹配較長的字符串(兩個字組合),也可以使用3個字母或更少的字母。所以也許中國炒鍋其實只匹配中文 –

+0

@ coder1984 - 抱歉,我沒有收到錯誤。我錯過了。我們只是沒有得到任何搜索結果(對於我們知道的事情存在於數據庫中)。 – Kevin

回答

3

我的假設是否正確?

您在兩方面都是正確的。作爲Natural Language Full-Text Searches下記載:

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

  • 任何字太短會被忽略。全文搜索找到的單詞的默認最小長度爲四個字符。

  • 忽略停用詞列表中的詞。停用詞是一個詞,例如「the」或「some」,它是如此常見以至於它被認爲具有零語義值。有一個內置的停用詞列表,但它可以被用戶定義的列表覆蓋。

默認停用詞列表在Section 12.9.4, 「Full-Text Stopwords」中給出。默認的最小字長和停用字列表可以按照Section 12.9.6, 「Fine-Tuning MySQL Full-Text Search」中的描述進行更改。

作爲Fine-Tuning MySQL Full-Text Search下記載:

被編入索引由 ft_min_word_lenft_max_word_len系統變量的定義字的
  • 的最小和最大長度。 (請參閱Section 5.1.4, 「Server System Variables」。)默認最小值是四個字符;默認最大值取決於版本。如果您更改任一值,則必須重建FULLTEXT索引。例如,如果你想三個字符的單詞變爲可查找,您可以通過將以下行的選項文件中設置ft_min_word_len變量:

     
    [mysqld] 
    ft_min_word_len=3 
    

    然後,重新啓動服務器,重建你FULLTEXT索引。請特別注意有關myisamchk的說明,請參閱本清單後面的說明。

  • 要覆蓋默認停用詞列表,請設置ft_stopword_file系統變量。 (請參閱Section 5.1.4, 「Server System Variables」。)變量值應該是包含停用詞列表的文件的路徑名,或者用於禁用停用詞過濾的空字符串。服務器在數據目錄中查找文件,除非給出絕對路徑名來指定不同的目錄。更改此變量的值或停用詞文件的內容後,重新啓動服務器並重建FULLTEXT索引。

    停用詞表是自由形式的。也就是說,您可以使用任何非字母數字字符,如換行符,空格或逗號來分隔停用詞。例外是下劃線字符(「_」)和單個撇號(「'」),它們被視爲單詞的一部分。停用詞列表的字符集是服務器的默認字符集;請參見第10.1.3.1節「Server Character Set and Collation」。

+0

真棒信息。謝謝! – Kevin