2014-01-10 25 views
8

私は 'template_phash'という列を持つテーブルAを持っています。 400Kの画像から生成されたphashを保存します。2つのphashの間のmysqlハミング距離

ここではランダムな画像を取り、その画像からファッシュを生成します。

は今どのように私はハミング距離の差が閾値未満であるテーブルAからレコードを取得することができるように、クエリ私はHamming distance on binary strings in SQLを見てきました20

言うが、それを把握することができなかったん。

私はこれを達成するための機能を作り出す必要があると思いましたが、どうしたらいいですか?私phashの

の両方が例えばのBigIntである:7641692061273169067

私はハミング距離がちょうど数であることを考え出し

SELECT product_id, HAMMING_DISTANCE(phash1, phash2) as hd 
FROM A 
WHERE hd < 20 ORDER BY hd ASC; 

答えて

21

のように照会することができるように私は機能を作る助けてください2つのハッシュの間に異なるビットの最初にxorか2つのハッシュを計算し、バイナリの数を求めます:

SELECT product_id, BIT_COUNT(phash1^phash2) as hd from A ORDER BY hd ASC; 
+0

このアイデアのように!それはどうにかして、このクエリを完全にアイテムのthousendsのすべてのphashを比較する必要はなく、代わりに一度だけ "最も近い"を比較する最適化することは可能ですか? – Manuel

関連する問題