我试图实现完整的测试搜索。 而这样做的第一件事,我确实改变的值ft_min_word_len = 2
的/etc/mysql/my.cnf为
[mysqld]
#
# * Basic Settings
#
#
# * IMPORTANT
# If you make changes to these settings and your system uses apparmor, you may
# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#
ft_min_word_len = 2
现在保存的并重新启动服务器。 我知道,如果我已经有一个索引与表中的FULLTEXT我将需要删除索引和重建或修复表。 但我已经创建的表作为
create table
`comments`
( `id` int(11),
`comment` varchar(200),
`iduser` int(11) ,
`date_added` datetime
)
ENGINE=MyISAM;
ALTER TABLE comments
ADD FULLTEXT INDEX comment_index
(comment);
然后,在上表中我有手动添加一些评论。
当我尝试搜索的东西
SELECT * FROM comments where MATCH (comment) AGAINST ('the') ; // "the" is very common word of length to see my test result
它返回0行。
但是,如果我坚决反对用4字长它的工作原理。
我试图检查ft_变量
mysql> show variables like 'ft_%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 2 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
+--------------------------+----------------+
有趣的是,在/etc/mysql/my.cnf
我只能看到ft_min_word_len
但ft_max_word_len
是不存在的,更重要的是搜索不到长度4不atall工作。
这让我疯了,不知道是否有一些其他的配置是在写一切,好像不能够或者找到它们。
任何帮助,将不胜感激。
MySQL版本在我的机器是
mysql Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (i686) using readline 6.2
我能够发现问题,并修复。
全文搜索设置是好的,因为我想与ALT东搜索2个字和我ft_min_word_len = 2
现在同时做更多的测试,我发现它随机并寻找一些2分字符的话,而忽略其他。
下面是一个例子
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('use');
Empty set (0.00 sec)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('Use');
Empty set (0.00 sec)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('you');
Empty set (0.00 sec)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
Empty set (0.00 sec)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('vs.');
Empty set (0.00 sec)
但接下来的作品
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('run');
+----+-------------------+-------------------------------------+
| id | title | body |
+----+-------------------+-------------------------------------+
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
+----+-------------------+-------------------------------------+
因此,它和别的东西显然发现其ft_stopword_file
其中有一个单词列表,如果任何搜索与其中一人发生了什么都不做。
这份名单是在这里http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html
因此,在这种情况下,允许任何词搜索长度至少2个字符长的
- 设置的ft_min_word_len到2
- 然后在mysql配置文件,为Debian /etc/mysql/my.cnf添加ft_stopword_file =“路径/到/ stopword_file.txt”
- 如果需要的话,我们可以把这个文件的空白。
哦,还有一两件事,一旦我们做了上面的设置我们需要重新启动mysql的,如果我们改变ft_min_word_len
那么我们就需要重新建立索引或修复表。