带单引号的全文查询



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

请看下面的例子:http://www.sqlfiddle.com/#!2/3dd3e/2/0-第二行不应该在

我怎么能做我想做的事?

如果字符串包含单引号,我想您应该对需要搜索的字符串进行双引号

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

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

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)

Piggy支持Bart的评论来处理单引号,并且仍然具有类似的搜索功能,我分别处理了每个术语。因此,逻辑是——如果一个术语只有一个引号,用括号括起来,否则就不用了。以下是一些可能有助于的php代码

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

我的对手是BOOLEAN模式中的对手('$term'

相关内容

  • 没有找到相关文章

最新更新