改进Mysql匹配反对搜索

时间:2012-11-12 16:26:37

标签: mysql

我一直在探索Mysql的Match Against search。结果很奇怪。例如,如果我有一个带有条目的表属性" education"并为" edu"进行搜索(使用匹配)然后就找到了。但如果我搜索" educ"没有返回任何结果。一直到" educatio"不会返回结果。所以它只匹配整个单词,或者如果一个单词中有3个字母或更少的字母匹配。

有没有办法对其进行改进,以便在搜索字词是属性中单词的子集时返回结果?例如。使用上面的例子,搜索" educat"将返回包含" Education"

的行

2 个答案:

答案 0 :(得分:0)

您可以通过匹配IN BOOLEAN MODE并使用*运算符来完成您想要的操作。

例如:

 ... MATCH(thing) AGAINST ('+educat*' IN BOOLEAN MODE)...

+告诉匹配仅包含包含匹配字词的thing值,在这种情况下,所有索引值都以&#34开头; educat&# 34; (有关布尔模式如何工作的详细信息,请参阅here。)

顺便说一下,默认情况下,MySQL中的全文搜索不会将3个或更少字符的单词编入索引,所以我怀疑你的匹配是" edu"没有像你想象的那样工作。查看ft_min_word_len变量的值,看看是否属于这种情况。

答案 1 :(得分:0)

你可以使用标记%a(a =你的单词或字母)来搜索任何以相同的单词或字母开头的单词 您可以使用%a%来搜索单词的开头和/或中间部分 最后一个你可以使用以单词或字母结尾的%