我有以下查询:

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/

10-10 05:16