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.

questionAnswers(1)

yourAnswerToTheQuestion