单引号的全文查询

时间:2012-09-07 10:22:11

标签: mysql full-text-search match-against

当我尝试使用带有单引号和星号通配符的字符串(即“levi's *”)尝试在布尔模式下进行全文搜索时,我遇到了问题:它似乎也搜索所有以“ s“,就像”长矛“一样,据我所知,引用应该被认为是单词的一部分,而两个单引号('')将是一个单词分隔符......但也许我错了。

请看这里的示例:http://www.sqlfiddle.com/#!2/3dd3e/2/0 - 第二行不应该在那里

我怎么能做我想做的事?

3 个答案:

答案 0 :(得分:2)

我想如果它包含单引号

,你应该引用你需要搜索的字符串

例如:MATCH(value) AGAINST ('"levi\'s"* lacost*' IN BOOLEAN MODE)

答案 1 :(得分:2)

这将为您提供示例中的两行:

SELECT  *
FROM    ft
WHERE   MATCH(value) AGAINST ('"levi\'s" lacost*' IN BOOLEAN MODE)

最后在http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html中,它讨论双引号中的完全匹配。然后你就可以逃避单引号而且你已经完成了。

使用括号,您可以添加星号:

WHERE   MATCH(value) AGAINST ('(levi\'s)* lacost*' IN BOOLEAN MODE)

答案 2 :(得分:0)

小猪支持Bart的评论来处理单引号并仍然将搜索功能作为喜欢,我分别对待每个术语。 所以逻辑是 - 如果一个术语有一个单引号,用括号括起来,否则留下它。 这是一些可能有帮助的PHP代码

$term = preg_replace("/[']/", "\'", $term);
$terms = explode(' ',$term);
foreach ($terms as &$t) {
    if (strpos($t, "'")) {
        $t = "(".$t.")";
    }
}
$term = implode(' ',$terms);

我的比赛是反对(' $ term '在BOOLEAN模式