0

这是我的第一篇文章,尽管我经常阅读您的帖子。

我面临的问题与我的表上的 FULLTEXT 索引有关。您可以在下面看到我遵循的过程:

CREATE TABLE dost(
  author VARCHAR(30),
  title VARCHAR(40),
  isbn SMALLINT NOT NULL)ENGINE MyISAM;

ALTER TABLE dost ADD FULLTEXT(author);

ALTER TABLE dost ADD FULLTEXT(author);

ALTER TABLE dost ADD FULLTEXT(author);

在我向表中插入一些数据后,它看起来像这样:

author                 title                               isbn

Fyodor Dostoyevsky     Poor Folk                           225125
Fyodor Dostoyevsky     Crime and Punishment                121320
Fyodor Dostoyevsky     The Gambler                         124239
Rowan Williams         Dostoyevsky                         083409
Joseph Frank           Dostoyevsky: A Writer In His Time   089823

当我尝试对作者列使用 MATCH AGAINST 命令时会出现问题。更具体地说,当我输入

SELECT author,title FROM dost WHERE MATCH(author) AGAINST('Williams');

我得到了预期的结果(Rowan Williams Dostoyevsky)但是当我遵循相同的程序并将 AGAINST 输入从“Williams”更改为“Dostoyevsky”时,它会输出一个空集作为结果。另一方面,标题列上的 FULLTEXT 索引工作正常。任何想法为什么会导致这个问题?

谢谢你的时间!

4

1 回答 1

0

您正在执行所谓的自然语言搜索。在这种类型的搜索中,任何在 50% 或更多行中的单词都将作为“公共值”被忽略。 参考

如果该限制不是您想要的,那么您需要进行布尔全文搜索,如下所示:

SELECT author,title FROM dost WHERE MATCH(author) AGAINST('+Dostoyevsky' IN BOOLEAN MODE);
于 2013-11-07T19:37:00.590 回答