2

我有一个名为“acts”的表,它有 3 列被索引在一起:

act_name, short_description, main_description

在表中,一行有一个名为“红色骚乱”的行为

当我执行以下搜索时,结果中出现 red riot:

SELECT * from acts where MATCH(act_name, short_description, main_description) AGAINST ('*r*' IN BOOLEAN MODE)

但是,如果我对此进行扩展并搜索*re*它,则不会返回任何结果:

SELECT * from acts where MATCH(act_name, short_description, main_description) AGAINST ('*re*' IN BOOLEAN MODE)

这是为什么?有没有更好的方法在匹配查询时使用通配符?

我已尝试更改*为,%但这在任一查询中均未返回任何结果。

4

1 回答 1

8

值“re”是 MATCH() 搜索的停用词。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

[编辑]

确实,“re”是一个停用词,但它不起作用的实际原因是全文搜索排除了源材料中长度小于系统变量 ft_min_word_len 的值(其默认值为 4)的词。

所以搜索“red*”将找到包含“redder”和“reddest”的记录,但不包含“red”。

http://sqlfiddle.com/#!2/16d442/1

于 2013-11-04T21:56:36.433 回答