我正在尝试使用MATCH ... AGAINST
进行搜索,但它没有给我任何结果。我已将ft_min_word_len
设为2
,将ft_stopword_file
设为""
。
这是我的表:
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
为什么我不能使用此查询找到“Say Yes”行?如果我使用LIKE js.name = 'say%'
,它就可以工作。
SELECT *
FROM rw_jam_search js
WHERE MATCH(js.name) AGAINST ('say*' IN BOOLEAN MODE)
答案 0 :(得分: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