2012-08-15 59 views
1

我使用Innodb的FTS功能来搜索我的数据库并返回按相关性排序的结果。使用布尔模式时,必须将搜索字符串转换为单个字词必须与某些运算符分开的格式,例如+,~,-,*转换在MySQL中使用的多字搜索字符串FULLTEXT布尔模式

如果我有一个搜索字符串与多个词,我怎么能(使用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

爆炸()对空间要求 – 2012-08-15 23:55:25

+0

能布尔模式返回关联得分然后重建?如果不是,自然语言模式是否返回相关性分数,并且词组的搜索字符串与搜索字符串中的顺序不同? – Nyxynyx 2012-08-15 23:56:47

+0

'相关性分数'是的它可以。 – 2012-08-16 00:01:57

回答

1

模糊查找我做的:

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

或常规:

$search_words = explode(' ', $search); 
$sql_search = '+' . implode(" +", $search_words); 
0
$string = 'stack over flow'; 

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

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

解决方案之一,如果这就是你要找的。

+0

+不需要* – 2012-08-16 00:03:12

+0

@Dagon我不会与此争论。 – 2012-08-16 00:06:11