4

そのため、全文検索を使用してより優れた検索機能を実装したいと考えていますが、期待どおりに動作していません。結果が返されないか、関連性がないと思われる結果が返されます。

最初に私はチェックしました:

「ft_min%」などの変数を表示

...4 として返されます

だから私はゲームタイトルでいっぱいのデータベースを持っています. 検索の良い例は「暗殺者の信条」です。データベースでは、実際には「Assassin's Creed」(アポストロフィに注意) として保存されています。したがって、次のクエリを実行すると:

SELECT g_name, MATCH(g_name) AGAINST ('assassins creed') AS score FROM tgmp_games WHERE MATCH(g_name) AGAINST ('assassins creed') LIMIT 15

正常に結果を返します (以下の一部)

...しかし、検索スクリプトでは、JqueryUI オートコンプリート ドロップダウンを使用し、単語全体よりも文字数が少ないものに対してクエリを送信すると、空に戻ります

SELECT g_name, MATCH(g_name) AGAINST ('assass') AS スコア FROM tgmp_games WHERE MATCH(g_name) AGAINST ('assass') LIMIT 15

また、データベース内の行数が少なすぎると影響を与える可能性があることも読みましたが、そこには25k行あるので問題ありません。私は何を間違っていますか?

結果の出力を取得できますが、パーツ検索用語を取得して結果を返す方法にもっと興味があります。

Array
(
    [g_name] => Assassins Creed III
    [score] => 15.406005859375
)

Array
(
    [g_name] => The Witcher 2: Assassins of Kings
    [score] => 8.46316719055176
)

Array
(
    [g_name] => Tenchu: Shadow Assassins
    [score] => 8.46316719055176
)

Array
(
    [g_name] => The Witcher 2: Assassins of Kings - Enhanced Edition
    [score] => 8.27909851074219
)

Array
(
    [g_name] => Assassin\'s Creed
    [score] => 6.84770059585571
)

Array
(
    [g_name] => Assassin\'s Creed III
    [score] => 6.84770059585571
)

Array
(
    [g_name] => Assassin's Creed II
    [score] => 6.84770059585571
)

Array
(
    [g_name] => Assassin's Creed: Revelations ...
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin\'s Creed: Revelations
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin's Creed: Brotherhood
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin's Creed: Bloodlines
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin's Creed II: Discovery
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin\'s Creed III: Liberation
    [score] => 6.77157783508301
)

Array
(
    [g_name] => Assassin's Creed: Altair's Chronicles
    [score] => 6.69712924957275
)

Array
(
    [g_name] => Assassin's Creed II:  Bonfire of the Vanities
    [score] => 6.69712924957275
)

また、「The Witcher 2」が他の「Assassin's Creed」ゲームの上に来るため、この順序は奇妙です. 句読点で立ち往生するのを避けるために、ある種のモードに入れることができるかどうかわかりませんか?

4

1 に答える 1

7

ブール検索については、MySQL のドキュメントを参照してください。 http://dev.mysql.com/doc/refman/5.5/en//fulltext-boolean.html . おそらく使用したいのは * 演算子です (% ワイルドカードに似ています)。

MATCH(g_name) AGAINST ('assass*' IN BOOLEAN MODE)

MySQL がフルテキスト インデックスに適用する 50% ルールにより、テーブル内の行数が影響を受けます。テーブル内の行の 50% を超える単語が出現する場合、MySQL は、結果を絞り込む際に値を提供するにはあまりにも一般的であると見なし、無視されます。これは通常、「the」などの単語を削除するためのものです。

于 2012-11-02T16:01:50.657 に答える