1

我正在使用 Innodb 的 FTS 功能来搜索我的数据库并返回按相关性排序的结果。使用布尔模式时,必须将搜索字符串转换为单个术语必须由某些运算符(如+~-、 )分隔的形式*

如果我有一个包含多个单词的搜索字符串,我如何(可能使用 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
4

2 回答 2

1

对于模糊搜索,我这样做:

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

或常规:

$search_words = explode(' ', $search);
$sql_search = '+' . implode(" +", $search_words);
于 2012-08-15T23:59:54.357 回答
0
$string = 'stack over flow';

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

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

如果这是您正在寻找的解决方案之一。

于 2012-08-15T23:56:43.907 回答