2012-02-08 49 views
0

選択クエリで結果を選択するときにmysqlに指定された特定の文字列を同じものとみなせるようにすることが可能かどうかを調べるのに問題があります。MYSQL強制パターンの一致

たとえば、「trachiotomy」という単語が含まれている列がありますが、言語の性質上、検索クエリが "trahiotomy"(cが見つからないことが多い)になる可能性が非常に高いです。

文字のパターンを別の文字パターンに認識させる方法はありますか? たとえば、 "ach"の文字列内のすべてのインスタンスを "ah"にマッチさせる - その逆も同様です。本質的には、それがどのように書かれたかにかかわらず強制的に。

もう1つの例は、Archonという言葉でしょう。私はArhonにも一致させたいと思います。 ユーザ入力がArchonの場合、データベースデータArhonと一致し、その逆も同様です。

私はsoundexを少し試してみましたが、いくつかのインスタンスにマッチしますが、アルゴリズムの仕組みにより、目的の一致した文字列が単語の先頭にある場合にはそれができません。

たとえば、「Chorevo」という単語が「Horevo」という単語にマッチするのは、何らかの理由で「chor」が「hor」に等しいとみなされ、その逆の場合もあります。

私はそれが何とか一致するかどうかを確認するためにREGEXPを読んでいます。 REGEXP 'arch'、 'arh')

この時点では全文検索クエリを使用していますが、それが問題であると判明した場合は変更できます。

私はこれを明確にしているとは確信がありませんが、可能な限りの助けに感謝します。

+0

は、レーベンシュタインそのアルゴリズムを使用していませんか?のようなものを:http://www.artfulsoftware.com/infotree/queries.php#552 –

+0

私はlevenstein(カスタム関数)をテストしましたが、これらのタイプの単語で問題をカバーすることはできません(特にc Chorevo/Horevoの別の文字で始まり、音声的には似ていますが)、私は深く掘り下げなかったので、大きなデータセットでは少し遅いように見えました。 – Larry

答えて

0

これは、音声マッチングとして知られています。 MySQLは、soundex(str)関数とa SOUNDS_LIKE b節(これはちょうどsoundex(a) = soundex(b)の省略形です)の比較的基本的なバージョンを実装しています。このようなマッチングは言語固有であり、MySQL実装は英語のために設計されているため、

また、あなたが欲しいものを行い、独自の変換を作成し、(別の列またはテーブル内の)データベースに保存する前に、データに適用します/研究でした。

+0

残念ながら、soundexアルゴリズムは、最初の文字(アルゴリズムの重要な要素です)が異なっているので、私がよく説明したようなケースにはマッチしません。 – Larry

+0

あなたが必要とするような独自のハッシュアルゴリズムを書く必要があると思います。 –