转换多字搜索字符串以在MySQL FULLTEXT布尔模式中使用

时间:2012-08-15 23:51:38

标签: php mysql innodb full-text-search

我使用Innodb的FTS功能搜索我的数据库并返回按相关性排序的结果。使用布尔模式时,必须将搜索字符串转换为一些表单,其中单个术语必须由某些运算符分隔,例如+~-*。< / p>

如果我有一个包含多个单词的搜索字符串,我怎么能(可能使用PHP)转换搜索字符串以便我可以将它与MATCH()... .AGAINST()子句一起使用?

搜索字词:

stack over flow

SQL查询

SELECT * FROM mytable WHERE 
    MATCH ( name, description) 
    AGAINST ('+*stack* +*over* +*flow*' IN BOOLEAN MODE);"

匹配结果

stack over flow
haystack hover flowers

2 个答案:

答案 0 :(得分:1)

模糊搜索我做:

$search_words = explode(' ', $search);
foreach ($search_words as $foo) {
    $sql_search .= '*' . $foo . '* ' ;
} 

或常规:

$search_words = explode(' ', $search);
$sql_search = '+' . implode(" +", $search_words);

答案 1 :(得分:0)

$string = 'stack over flow';

$string = preg_replace('#\b(\S+)\b#', '+*\\1*', $string); # \b can be ommited

echo $string; # +*stack* +*over* +*flow*

其中一个解决方案,如果您正在寻找它。