これは私の灰白色の問題を私が読んで、mysqlを通り抜けていて、さまざまなオプションを見ているだけです。フルテキストmysqlの検索と一致する正確な文字列
要するに、私はタグクラウドを作っており、その過程の一部は、その単語が存在するかどうかを確認することです。もしそうなら+1となりますが、それは正確なフレーズでなければなりません。
私は全文検索が最良の選択であると考えました。
例としてです。
$string = "hair dryer";
$string = '"'.$string.'"'; //enclose string in quotation marks to define must be an exact match
//$string = mysqli_real_escape_string($mysqli,$string); // removed to see if this was effecting the result.
$sql = "SELECT * FROM `search_keyword` WHERE Match (`keyword`) Against ('$string' IN BOOLEAN MODE) LIMIT 1";
$result=mysqli_query($mysqli,$sql);
だから、テストは、私は言葉「ヘアドライヤー」の行を持って、それはそれと一致してDBにあった - 私は「髪」それはまだ引き出しに文字列を変更する場合は良い結果
正確に一致しないようにしてはいけない "ヘアドライヤー"。
私はこれをすべて試してみると、間違った結果になります。
(
[0] => Array
(
[keyword] => hair dryer
[id] => 25
)
) /// should be empty and hair as a single row is not found
何かアドバイスはあなたがPHPでそれを行うことができ
なぜ、 'SELECT count(*)FROM ... WHERE Keyword = $ string'ではないのですか?特定のマッチだけが必要な場合。 – Mruf
はい、その方法を使用していますが、何らかの理由で既存の単語を拾い上げることができず、そうでなければ別の単語を追加します。私はフルテキストを使用すると、より正確な方法が得られ、重複を作成しないと考えました。私は、正確に一致するものだけを引き出すクエリを得るのがなぜ難しいように思われるのか混乱しています。 –
あなたの問題を正しく理解していれば、全文検索は正しい方向ではありません。なぜなら、フルテキストが逆索引を作成していても、制限文字数制限を1に設定しても 'ヘアドライヤー'と一致することになります。 trim、strtolowerのようなクエリの前にキーワードを処理するようなPHPで作業する必要があります。SELECT count(*)FROM ... WHERE Keyword = trim($ string)またはキーワードフィールドのグループクエリ。 –