2011-12-11 117 views
2

我的MySQL表沒有返回帶有MATCH (col) AGAINST ('')查詢的結果。MySQL全文搜索不匹配

表很簡單:

id | url | fullTextIndex 

我的查詢是

SELECT *, Match(fullTextIndex) AGAINST ("7f7f7f807f8080807f8080807f7f7f807c828888808a86967e8b858d7f89838a76829e958f7badb68084a3a38384899077848b877f799f9c85799fa2827d8c8a ") FROM Pictures; 

最後一欄,本場比賽,始終爲0除,我知道一個事實,上面的字符串包含,逐字,在其中一個值。

注意事項:

  • 的字符串是僅在該行(所以它不是行的50%以上,因此它不應該被忽略)。
  • 這不是全部價值
  • 的柱是bigText列
  • 當我使用INSTR,我得到的值1(這是正確的)

任何想法,爲什麼這樣的查詢可能不加工?

回答

4

人們似乎對考慮指數化的話長度(配置)上的限制:

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_ft_max_word_len

您可以SHOW VARIABLES LIKE "ft_max_word_len";

它返回84檢查當前值我服務器,你的字符串是128個字符長。

修復建議:

  1. 此行添加到您的my.cnf文件:ft_max_word_len=128(或任何你需要的最大長度)

  2. 重建索引MySQL的網站上作爲建議:REPAIR TABLE tbl_name QUICK;

+0

是否有任何其他解決方案讓這個工作?這是我相信的問題,但我的主持人不允許我修改這些變量。 :( – Ktash

+0

恐怕不是:'ft_max_word_len'不是一個動態變量,因此必須在服務器配置中指定!也許你的應用程序的變化可以解決這個限制嗎? – Benjamin

+1

不幸的是,這也不起作用。一個我們用來進行圖像比較的指紋,我們不能真的讓它變小,或者分解它,我只需要爲它設置一個不同的服務器,謝謝:) – Ktash