2011-08-27 13 views
5

私のWebアプリケーションには、複数のユーザーがいます。彼らは自分のwebappに自分のコンテンツをアップロードしています。アップロードする各コンテンツには、タイトル、説明、タグ(キーワード)があります。私は、コンテンツやユーザー名を検索するための検索スクリプトを書くことができます。彼らはスペルミスを与えても結果は返されません。たとえば、データベースに "Michael"という名前のユーザーがいて、検索クエリが "Micheal"だった場合は、 "マイケル"を検索することを意味します。これは検索候補以外のものです。PHP MySQLの検索の提案

また、この提案は、ユーザーがアップロードしたコンテンツ用である必要があります。ユーザーはコンテンツのタイトルを「マイケルの活動2011年5月」としておくことができ、個々の単語についての提案を生成する必要があります。

答えて

8

あなたはそのような似た響きの名前を検索するSOUNDEXを使用することができます。

SELECT * FROM users WHERE SOUNDEX(name) = SOUNDEX(:input) 

またはその

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

のような(完全に同等である)

編集:もしSoundex以外のアルゴリズムを使用する必要があります(Martin Hohenberg氏の示唆)、テーブルに余分な列を追加する必要があります(例:sound_equivalent)。 (これは実際には、この列を索引付けできるので、より効率的なソリューションです)。要求は次のようになります。

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

sound_equivalent列の内容は、その後、PHPアルゴリズムで生成され、ユーザパラメータの残りの部分とテーブルに挿入することができます。

+2

あなたの言語の発音に合わせて設計されたsoundex形式のアルゴリズムを使用してください。たとえば、ドイツ語の場合、Soundexはそれほど有用ではなく、KölnerPhonetik(これはMYSQLの一部ではありません)に置き換える必要があります。 – ty812

0

おそらく最も一般的な単語(犬、家、都市、数字、水、インターネットなど)のデータベースを作成します。それを大きくする必要はありません(<10000ワード)。 その後、検索用語を爆発させたら、検索語のような単語の "単語"データベースをチェックします。次に、提案をエコーアウトします。

2

検索結果がない場合は、pspellというPHPライブラリを使用して候補を表示することもできます。

関連する問題