我有以下查询:
SELECT * FROM products WHERE is_active = 1 AND MATCH (full_text) AGAINST ('М 1050' IN BOOLEAN MODE)
此查询返回两条记录,这是两条记录的full_index列内容:
013 001 106; ЪглошлайфSPARKY M 1050 HD; 1050W,10000об,ф125мм ;活泼的 ; 69; ; 040 070 1050 ; Вложкадванадесетограмудължена; 1/4“5ммFORSE/ 5295005 /; FORCE; 77;
但我只想要第一行,我不需要第二行。怎么了?
答案 0 :(得分:2)
除了用户144590提供的答案;默认情况下,M
不会被视为单词。
来自the docs
任何太短的单词都会被忽略。通过全文搜索找到的单词的默认最小长度是InnoDB搜索索引的三个字符,或MyISAM的四个字符。您可以在创建索引之前通过设置配置选项来控制截止:InnoDB搜索索引的innodb_ft_min_token_size配置选项或MyISAM的ft_min_word_len。
<强>更新强>
在不更改最小长度的情况下,我猜您必须将文本'M 1050'
中的空格替换为'_'
中的其他单词字符,并与'M_1050'
匹配(在查询中),或运行慢得多的LIKE '%M 1050%'
条件。
答案 1 :(得分:1)
基于http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
请注意 在实现此功能时,MySQL使用有时被称为隐含布尔逻辑的内容,其中
加号(+)代表AND
减号( - )代表NOT
[no operator]暗示OR
所以基本上你正在做一个OR,如果你需要两个术语使用+这样
SELECT * FROM products WHERE is_active = 1 AND MATCH (full_text) AGAINST ('+М +1050' IN BOOLEAN MODE)
答案 2 :(得分:0)
如果要精确匹配某些单词,请使用双引号(例如'“М1050”')
SELECT * FROM products WHERE is_active = 1 AND MATCH (full_text) AGAINST ('"М 1050"' IN BOOLEAN MODE)