1

我的数据库中有一个 varchar 列,我想使用 mysqlMATCH / AGAINST查询来搜索单词。但是,如果有多个单词,它似乎不起作用。

INSERT INTO mytable (title) VALUES ('my id 123');

SELECT * FROM mytable WHERE MATCH (title) AGAINST ('+my +id +123' IN BOOLEAN MODE);

不返回任何结果。我在查询语法中遗漏了什么吗?请注意,该title字段没有全文索引。

4

2 回答 2

1

您需要设置以下内容:

步骤 01:创建停用词列表

echo "a"    > /var/lib/mysql/stopwords.txt
echo "an"  >> /var/lib/mysql/stopwords.txt
echo "the" >> /var/lib/mysql/stopwords.txt
chown mysql:mysql /var/lib/mysql/stopwords.txt

这将阻止索引最多评论词的文章

STEP 02 : 添加到 /etc/my.cnf

[mysqld]
ft_min_word_length=1
ft_stopword_file=/var/lib/mysql/stopwords.txt

STEP 03 : 重启mysql

service mysql restart

STEP 04 : 创建 FULLTEXT 索引

ALTER TABLE mytable ADD FULLTEXT ft_title (title);

之后,您的查询应该可以工作,或者至少会产生切实的结果。

试试看 !!!

于 2013-04-22T17:45:23.967 回答
0

my, id&123可能低于ft_min_word_length. 我犹豫是否将数字视为单词,快速测试显示它们是,但最小(字符串)长度仍然适用。

于 2013-04-22T17:33:31.540 回答