表格
id name
--- ------
1 chinu
2 sanjib
3 chinmay
我的MYSQL查询
SELECT * FROM users WHERE MATCH (name) AGAINST ('chi' IN BOOLEAN MODE)
在上面的查询中,我得到0
记录。
我的输出即将到来
1 chinu
3 chinmay
如何使用MATCH ... AGAINST查询来获取我的实际记录?
编辑 - 如果我正在搜索chinu
而不是chi,我将获得1条记录。
答案 0 :(得分:2)
您需要在'chi'中添加一个星号,以指示查询应该与包含字符串的所有内容匹配,而不仅仅是字符串本身。仅使用字符串'chi'将仅匹配'chi',例如。
将您的查询更改为
SELECT * FROM users WHERE MATCH (name) AGAINST ('chi*' IN BOOLEAN MODE)
你应该得到你期望的结果。
答案 1 :(得分:0)
我认为您忘记了+
标志:
SELECT * FROM users WHERE MATCH (name) AGAINST ('+chi' IN BOOLEAN MODE)
或者如果它是一个精确的短语,请使用双引号括起字符串:
SELECT * FROM users WHERE MATCH (name) AGAINST ('"chi"' IN BOOLEAN MODE)
答案 2 :(得分:0)
我是第一个承认这不容易找到的人。 MySQL全文搜索使用名为ft_min_word_length
的系统变量。默认值为4,如here所示。
因为您正在搜索3个字符的单词,所以它没有被编入索引。因此找不到它。
documentation提供了有关微调搜索的更多信息。但基本思想是你需要改变参数的值并重建索引。
但是,对于您的特定查询,您只需要包含通配符,如其他答案中所述。