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*

それがあなたが探しているものであるならば、解決策の1つ。

于 2012-08-15T23:56:43.907 に答える