1

我正在尝试使用 进行搜索MATCH ... AGAINST,但它没有给我任何结果。我已经设置ft_min_word_len了 to2ft_stopword_fileto ""

这是我的桌子:

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)
4

1 回答 1

2

默认缓存字的最小长度为3,可在配置文件中更改:

[mysqld]
ft_min_word_len=3

所以“say”这个词不会被全文搜索索引。如果您有权访问 mySQL 的存储文件,则可以使用:

myisam_ftdump rw_jam_search.MYI 0

列出将包含在全文搜索中的所有索引词。

因此,如果您尝试此查询,它应该可以正常工作:

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

编辑:AGAINST()星号(*)与检查文档一起使用时完全不同

于 2012-06-07T12:00:02.980 回答