I saw that too... I'm suspicious of the `SET person_filter = (SELECT bit_or(person.hash) ...);` line, personally. If the hash function is supposed to produce roughly random bits (I'm not familiar with murmur hash though, this may not be true), and you're simply OR-ing them together, you lose zero bits pretty quickly.
But I need to brush up on murmur hash, and bloom filters in general, so I may be entirely wrong. Maybe it's valid, and maybe that does represent a 0.5% error.
For the bloom filter: (actual time=0.033..2.546 rows=430 loops=1)
And for the join: (actual time=7.440..64.843 rows=9 loops=1)
So the join returned 9 movies for person_id=160, while the bloom filtered returned 430.
I understand it's a probabilistic model, but that's a pretty whopping difference in data. Have I missed something?