我使用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
答案 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*
其中一个解决方案,如果您正在寻找它。