Metaphone および Double Metaphone 検索アルゴリズムについて学習したばかりで、いくつか質問があります。Metaphone Wiki ページによると、実装、特に MySQL 実装を含むいくつかのソースが見つかりました。私のテスト データベースでテストしたかったので、最初にここにある metaphone.sql ファイル (ダブル metaphone 関数を含む) をインポートしました。
現在、「アフガニスタン」、「アルバニア」、「アルジェリア」など、「名前」列にすべての国がリストされているテーブル、国があります。まず、実際に新しい国を作成したかったのです。表の列に、各国の Double Metaphone 文字列を格納します。次のコードを実行しました。
UPDATE country SET NameDM = dm(name)
すべてが正しく機能しました。アフガニスタンのメタフォン文字列は「AFKNSTN」、アルバニアは「ALPN」、アルジェリアは「ALKR;ALJR」などです。「すごい」と思いました。
ただし、テーブルにクエリを実行しようとすると、結果が得られませんでした。metaphone.sql の作成者によると、次の SQL ステートメントの構文に従いました。
SELECT Name FROM tblPeople WHERE dm(Name) = dm(@search)
そこで、このコードを次のように変更しました。
SELECT * FROM country WHERE dm(name) = dm(@search)
もちろん、「@search」を探している検索語に変更しましたが、SQL クエリを実行するたびに 0 件の結果が得られました。
誰でもこの問題を説明できますか? 何か重要なことを見逃しているのでしょうか、それとも単に Metaphone アルゴリズムを誤解しているだけなのでしょうか?
ありがとうございました!