2012-08-15 106 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