2012-06-07 54 views
1

我正在嘗試使用MATCH ... AGAINST進行搜索,但它沒有給出任何結果。我已將ft_min_word_len設置爲2ft_stopword_file""MATCH ... AGAINST未找到行

這是我的表:

CREATE TABLE `rw_jam_search` (
    `jam` int(10) unsigned NOT NULL, 
    `name` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`jam`), 
    KEY `name` (`name`), 
    FULLTEXT KEY `name_ft` (`name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

我的表中的數據:

jam name 
53 Say Yes 
54 testing 
55 poijoik 
56 stdd 
57 Spartaaa! 
58 Fearless 
59 Mr. Mysterious 
60 testmys 
61 hello worlds 

爲什麼我無法找到該行「支持」與此查詢?它適用於如果我使用LIKE js.name = 'say%'

SELECT * 
FROM rw_jam_search js 
WHERE MATCH(js.name) AGAINST ('say*' IN BOOLEAN MODE) 
+0

請'SHOW CREATE使用時,星號(*)是完全不同的TABLE rw_jam_search' – Teneff

+0

@Teneff,看看「這是我的表」 – Marwelln

回答

2

默認的緩存字的最小長度爲3,它可以在配置文件中更改:「說」不會被編入索引的全文搜索

[mysqld] 
ft_min_word_len=3 

這樣的話。 如果你有機會到MySQL的存儲文件,您可以使用:

myisam_ftdump rw_jam_search.MYI 0 

列出所有將要包含在全文檢索索引的話。

因此,如果您嘗試此查詢應該工作得很好:

SELECT * FROM rw_jam_search 
WHERE MATCH(`name`) AGAINST('worlds') 

編輯:AGAINST()檢查documentation

+1

從你給出的鏈接:*星號作爲截斷(或通配符)運算符。與其他操作員不同,它應該被附加到要影響的單詞*。否則,+1。 – Quassnoi

+0

我已經改變了'ft_min_word_len',這不是問題。如果我搜索'hell *',它不會找到'hello words',它會找到'先生。如果我搜索'先生*',那麼神祕。 – Marwelln

+0

@Marwelln _星號用作截斷(或通配符)運算符。與其他操作員不同,它應該被附加到要影響的單詞上。如果以*運算符前面的單詞開頭,則單詞匹配._ - 檢查我的編輯 – Teneff