这是我目前正在使用的:
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);
有更快的方法吗?
您说您正在寻找“两个数组之间的 Jaccard 相似性”
您可以考虑提供此功能的MadLib
dist_jaccard()
您可能想在没有
STRICT
. 这可能会减慢它的速度。你可能想使用
INTERSECT ALL
特别是如果你知道你没有在$1
.正如 Craig Ringer 在评论中所说,您可能想要退出
intarray
并考虑使用&
.在这里给出更准确的答案,
INTERSECT
?