0

これは遠回りだと思います……。

私のデータベースには次のフィールドがあります。title, description, date, price, hash

現在、私はこのように MD5 ハッシュを生成し、それを各アイテムmd5($title.$desc.$date.$price)hashフィールドに配置します。これにより、新しいアイテムがデータベースに追加されたときに、同じ詳細を持つアイテムが既に存在するかどうかを簡単かつかなり信頼できる方法で知ることができます。データベース。

私がやりたいのはこれを拡張することで、一致プロセスがもう少しあいまいになります。これは、説明が 1 文字か 2 文字だけ異なるか、価格がわずかに異なる可能性がある、重複したアイテムがデータベースに多数あることが原因です。

データベースは大きく (300 万行)、INNODB です。また、検索から返された類似の結果を除外する方法が提供される場合は、Sphinx を自由に使用できます。

4

2 に答える 2

1

まあ、Sphinx(または他の「検索エンジン」)は、クエリ時に重複を削除できるように、同様の「ハッシュ」コンピューティングを必要とします。

sphinx が役立つ場合は、アイテムをデータベースに挿入するときに、sphinx を使用してデータベースで類似アイテムの検索を実行します。潜在的な重複の「ランク付けされた」リストを取得できます。上位のアイテムのスコアが高ければ、十分に類似していると言え、その事実をデータベースに保存できます。

(私がそれを行う方法は、「グルーパー」と呼ばれるテーブルに 2 番目の列を持っていることです。デフォルトでは、アイテムの主キーを複製するだけです。ただし、重複が見つかった場合は、代わりに、複製したアイテムの PK に変更されます。次に、そのグルーパー列で mysql (またはスフィンクス!) GROUP BY を実行するだけです)

于 2013-07-23T12:55:34.583 に答える
0

説明に SOUNDEX を使用できます (単語のスペルがわずかに異なる場合に使用されます)。

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_soundex

価格については、小さな違いに対処する MD5 を作成する前に、最も近い 10 (または合理的なもの) に丸めると.

于 2013-07-23T12:49:32.050 に答える