我在全文搜索中面临一个奇怪的问题。
我的查询是。
SELECT `itemid`, `title`, `image`,
MATCH( `itemid`, `title`, `product_id`,`p1_name`, `p2_name`)
AGAINST ("+samsung +one" IN BOOLEAN MODE ) AS score
FROM `tablename`
WHERE `active_flag`='1' AND `image`!=''
AND `new_price`>'0' AND
MATCH( `itemid`, `title`, `product_id`,`p1_name`, `p2_name`) AGAINST ( "+samsung +one" IN BOOLEAN MODE ) !=0
ORDER BY score DESC;
这给了我与全文索引字段中的单词“one”不匹配的数据。 即使我包含任何单词或所有这些单词,如“一二三四”作为搜索参数,它给了我结果。
答案 0 :(得分:1)
Mysql全文索引实现了“停用词” - 为搜索目的而忽略的常用词,例如“a”,“the”等,甚至还有一些很长的词,如“对应”。
默认的停用词列表包含单词“one”,这就是为什么它没有得到任何匹配。有关完整列表,请参阅this link。
您可以通过编辑此文件来控制列表:
myisam/ft_static.c
答案 1 :(得分:0)
默认情况下,全文搜索仅匹配四个或更多字符的单词。
要匹配较短的字词,您需要change the appropriate parameters(innodb_ft_min_token_size
或ft_min_word_len
,具体取决于您使用的数据库引擎)并重建索引。