質問

私のウェブサイトの検索に新しい機能を追加したいです。 PHPとMySQLを使用しています。ユーザーが検索するアイテムへのテーブルを含むMySQLデータベース、各アイテムには、Comma分離されたキーワード「猫、犬、馬」の「キーワード」列があります。私のウェブサイトでユーザーを検索した後、彼の検索キーワードと同様の「85%」と言われている単語を取得したいと思います。これは再定義の検索です。間違いのために、キーワードが正しいか間違っているかどうかを提供するサービスなどが必要なので、いくつかの修正を取得し、データベースにそれらが存在するかどうかを確認し、それらの修正をユーザーに提供して検索キーワードを変更します。

私はここで解決策を求めていません...しかし、あなたが私を何らかの形で導くことができれば素晴らしいでしょう

みんなありがとう

乾杯

役に立ちましたか?

解決

重要なのは、「85%類似」のアイデアです。ここにいくつかのアイデアがあります:

同様の単語テーブル

キーワードの一般的な間違いをリストするテーブルを定義できます。その後、データベースの検索方法を強化して、一般的な間違いを適切な値にマッピングする必要があります。

同様の単語の検索

検索を実行するときは、ライブラリを使用して同様の単語を生成し、それらすべてを検索します。検索を送信する前に、あらゆる種類のスペルライブラリを使用して可能なワードマッチを生成できます。または、に基づいて自分で書く 距離を編集します アルゴリズム。

必要に応じて確認してください。PHPを使用しているため、Pspellを検討できます。最初に電話することができます pspell_check 単語が正しく綴られているかどうかを確認します。次に、電話します pspell_suggest 提案を得るために。

例については、このリンクを参照してください。

データベース機能を使用します

たとえば、mysqlがあります SOUNDS_LIKE オペレーター。検索できます WHERE keyword SOUNDS_LIKE 'kat' (おそらく)取得 cat. 詳細については、ドキュメントページをご覧ください, 、これはいくつかの制限(英語やUTF-8のみなど)を警告します。


かなり一般的な問題のように聞こえるので、おそらくこの問題には他にも標準的な解決策があるでしょう。おそらく、これを抽象化できる(またはデータベースインターフェイスレイヤー)に特有のものがあります。

最初の2つでは、85%の類似性の概念を満たすことができます。 3番目のオプションがどれだけうまく機能するかはわかりませんが、「Soundz Kool」です。

他のヒント

PHPには類似の_text()がありますが、それはクエリの後です。 MySQLでフルテキスト検索を確認することもできます。

編集距離アルゴリズムを調べてみてください。基本的に2つの入力文字列の場合、戻り値は、1つの文字列を他の文字列に変換するために必要な編集の最小数です。これにより、2つの文字列がどれだけ近いかについてのアイデアが得られます。

距離を編集します

Apache Solrは、フルテキスト検索機能だけでなく、一致するスコアや自動接続システムも組み込まれたオープンソース検索プラットフォームです。 強力な機能.

サイト内の情報の量が十分に重要でない場合、このオプションは過度に聞こえるかもしれませんが、少なくともチェックすることをお勧めします。

アプリとSOLR間の通信は、標準のRESTインターフェイスを介して処理できます。 AFAIK現時点で利用可能な2つの優れたSOLR固有のPHPライブラリがあります。

サーバーのセットアップは非常に簡単であり、あなたのニーズに最適なSolRを調整して最適化するという面倒な部分(および興味深い部分)です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top