在PHP中使用LIKE的SQL搜索查询

时间:2012-06-21 09:46:21

标签: php mysql full-text-search

问题:

我正在尝试在我的SQL搜索查询中使用全文索引,但由于某种原因,它不会从数据库中返回任何帖子。

PHP / SQL代码:

$string = mysql_real_escape_string($_POST['searchtext']);

$query = "SELECT
            EID,
            CONCAT (u1.Firstname, ' ', u1.Lastname) AS Examiner,
            Supervisor,
            ExaminationDate,
            FirstAuthor,
            SecondAuthor,
            Level,
            Credits,
            Completed
        FROM betyg_essays grade
            INNER JOIN betyg_users u1 ON grade.Examiner = u1.UID
        WHERE
            MATCH (Supervisor, FirstAuthor, SecondAuthor) AGAINST ('$string')
        ORDER BY
            EID ASC
";

MySQL表定义:

enter image description here

包含两个帖子的数据库中的列:

enter image description here

情境:

如果我只搜索“每个”,它应该返回第二个帖子。

1 个答案:

答案 0 :(得分:0)

假设你的全文索引定义是正确的(你应该发布你的表定义),MySQL只会在标准安装上索引至少4个字母的单词。如果您想在搜索中支持3个字母的字词,则必须通过设置ft_min_word_len来更改my.cnf中的内容:

[mysqld]
ft_min_word_len=3

此外,您应该按照MySQL documentation中的说明检查阈值和停用词列表。

编辑

根据您的table definition,您使用的InnoDB表在MySQL 5.6.4之前不支持全文索引。那是满满的吗?而且我看不到您的定义中定义的任何全文索引。

应该是这样的:

... FULLTEXT KEY `keywords` (`keywords`) ...

要为表添加全文索引,请使用ALTER TABLE语法:

ALTER TABLE betyg_essays ADD FULLTEXT(FIELD1, FIELD2, ...);