我有以下查询:
SELECT * FROM products WHERE is_active = 1 AND MATCH (full_text) AGAINST ('М 1050' IN BOOLEAN MODE)
该查询返回两条记录,这是两条记录的full_index列内容:
; 013001106; SPA SPARKY M 1050 HD; 1050W,10000об。,ф125мм
;活泼的 ; 69; ; 040 070 1050; Вложкадванадесетограмудължена;
1/4“5ммFORSE / 5295005 /;力; 77;
但是我只想要第一行,不需要第二行。怎么了?
最佳答案
除了user144590提供的答案外;默认情况下,M
不被视为单词。
来自the docs
任何太短的单词都会被忽略。全文搜索发现的默认最小单词长度对于InnoDB搜索索引为3个字符,对于MyISAM为4个字符。您可以通过在创建索引之前设置配置选项来控制截止:InnoDB搜索索引的innodb_ft_min_token_size配置选项,或MyISAM的ft_min_word_len。
更新
在不更改最小长度的情况下,我想您必须用另一个词字符(如'M 1050'
)替换(在列数据中)文本'_'
中的空格,并与'M_1050'
匹配(在查询中),或运行LIKE '%M 1050%'
条件要慢得多。
关于mysql - MySQL全文搜索使用针对返回错误结果集的匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25911021/