Isto é o que estou usando atualmente:
CREATE FUNCTION array_intersect(a1 anyarray, a2 anyarray)
RETURNS anyarray AS
$$
SELECT ARRAY(
SELECT unnest($1)
INTERSECT SELECT unnest($2)
ORDER BY 1
);
$$ LANGUAGE sql
IMMUTABLE STRICT;
--get the length:
select array_length ( array_intersect(array[...], array[...]), 1);
Existe uma maneira mais rápida?
Você diz que está procurando "Semelhança de Jaccard entre dois arrays"
Você pode considerar o MadLib, que fornece isso como
dist_jaccard()
Você pode tentar sem
STRICT
. Isso pode estar atrasando.Você pode querer usar
INTERSECT ALL
Especialmente se você sabe que não tem dupes em$1
.Como Craig Ringer disse nos comentários, você pode querer sair
intarray
e considerar o uso de arquivos&
.Para dar uma resposta mais precisa aqui,
INTERSECT
fornece?