Encontrar cadenas similares con PostgreSQL rápidamente
Necesito crear una clasificación de cadenas similares en una tabla.
Tengo la siguiente tabla
create table names (
name character varying(255)
);
Actualmente estoy usandopg_trgm módulo que ofrece lasimilarity
Función, pero tengo un problema de eficiencia. He creado un índice como elEl manual de Postgres sugiere:
CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
y estoy ejecutando la siguiente consulta:
select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;
La consulta funciona, pero es realmente lenta cuando tienes cientos de nombres. Además, tal vez olvidé un poco de SQL, pero no entiendo por qué no puedo usar la condiciónand sim > .8
sin obtener un error de "columna sim no existe".
Me gustaría cualquier pista para hacer la consulta más rápida.