Szybkie wyszukiwanie podobnych ciągów za pomocą PostgreSQL
Muszę utworzyć ranking podobnych ciągów w tabeli.
Mam następującą tabelę
create table names (
name character varying(255)
);
Obecnie używampg_trgm moduł, który oferujesimilarity
funkcja, ale mam problem z wydajnością. Stworzyłem indeks taki jakPodręcznik Postgres sugeruje:
CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
i wykonuję następujące zapytanie:
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;
Zapytanie działa, ale jest naprawdę wolne, gdy masz setki nazw. Co więcej, może zapomniałem trochę SQL, ale nie rozumiem, dlaczego nie mogę użyć warunkuand sim > .8
bez uzyskania błędu „symulacja kolumny nie istnieje”.
Chciałbym, aby każda wskazówka przyspieszyła zapytanie.