MySQL全文search失败
这是我testing的。
mysql> select * from product; +------------+---------+---------------+ | Id | Product | ProductIdType | +------------+---------+---------------+ | B00005N5PF | one pen | ASIN | | B000J5XS3C | | ASIN | +------------+---------+---------------+ 2 rows in set (0.00 sec) mysql> select * from product p where match (p.Product) against ('pen' in boolean mode); Empty set (0.00 sec) mysql> select * from product p where match (p.Product) against ('one pen' in boolean mode); Empty set (0.00 sec)
这是创build声明。
CREATE TABLE product ( Id VARCHAR(16), Product VARCHAR(128), ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (Product) ) ENGINE=MyISAM;
等号和“LIKE”正常工作。 所以为什么?
-- drop table testproduct; CREATE TABLE testproduct ( Id VARCHAR(16), prod_name TEXT, ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (prod_name) ) ENGINE=MyISAM; insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C00ZZ5N5PF','let us get rid of some noise','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('D00LL5N5PA','four score and seven years ago our fore...','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('EEEZZ5N5PF','he has a harpoon','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C01ZZ5N5PF','and then we','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B00ZZ5N5PF','he has a pen in his pocket not a banana','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C02ZZ5N5PF','went to the store','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C03ZZ5N5PF','and decided that we should buy some','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C04ZZ5N5PF','fruit cups or fruit or berries or pebbles','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C037Z5N5PF','then he and her she and it','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('C04K95N5PF','threw some daggers and a harpoon','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('D88895N5PF','more noise and some of this','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('D34595N5PF','this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('D12395N5PF','and there we go','ASIN');
全文search需要一些变化来摆脱重复的“噪音”。 用最less的数据进行testing将会导致较差的结 把你的整个collections品放在里面,让它有意义的出来。 如下面的链接所示,甚至试图search单词的最小大小的设置。
停止词语
有各种语言的停止词 MySql 列表代表在search过程中跳过的无关紧要的单词。 该列表被编译到服务器中,但可以被重写,如本手册页和文本所示:
要覆盖默认的停用词列表,请设置ft_stopword_file系统variables。 (请参见第5.1.4节“服务器系统variables”。)variables值应该是包含停用词列表的文件的path名,或者用于禁用停用词过滤的空string。 服务器在数据目录中查找文件,除非给出绝对path名来指定不同的目录。 更改此variables的值或停用词文件的内容后,重新启动服务器并重build您的FULLTEXT索引。
一些样本查询
-- select * from testproduct SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('score' IN BOOLEAN MODE); SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('harpoon' IN BOOLEAN MODE); SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('banana' IN BOOLEAN MODE); SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('years' IN BOOLEAN MODE);
得到多个匹配的单词:
SELECT id,prod_name, match( prod_name ) AGAINST ( '+harpoon +article' IN BOOLEAN MODE ) AS relevance FROM testproduct ORDER BY relevance DESC
在relevance
列中给出一个真实的权重:
SELECT id,prod_name, match( prod_name ) AGAINST ( '+harpoon +article' IN NATURAL LANGUAGE MODE) AS relevance FROM testproduct ORDER BY relevance DESC +------------+--------------------------------------------------------------------------------------------------------------------+--------------------+ | id | prod_name | relevance | +------------+--------------------------------------------------------------------------------------------------------------------+--------------------+ | D34595N5PF | this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon | 3.6207125186920166 | | EEEZZ5N5PF | he has a harpoon | 1.2845110893249512 | | C04K95N5PF | threw some daggers and a harpoon | 1.2559525966644287 | |------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
从这里解除了多个单词部分。 谢谢斯宾塞