问题:
我正在尝试在我的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表定义:
包含两个帖子的数据库中的列:
情境:
如果我只搜索“每个”,它应该返回第二个帖子。
答案 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, ...);