如何使用MATCH ... AGAINST查询搜索文本?

时间:2014-07-01 13:41:51

标签: mysql

表格

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条记录。

3 个答案:

答案 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提供了有关微调搜索的更多信息。但基本思想是你需要改变参数的值并重建索引。

但是,对于您的特定查询,您只需要包含通配符,如其他答案中所述。