Finden Sie mit PostgreSQL schnell ähnliche Zeichenfolgen

Ich muss eine Rangfolge ähnlicher Zeichenfolgen in einer Tabelle erstellen.

Ich habe die folgende Tabelle

create table names (
name character varying(255)
);

Derzeit benutze ichpg_trgm Modul, das das anbietetsimilarity Funktion, aber ich habe ein Effizienzproblem. Ich habe einen Index wie den erstelltPostgres Handbuch schlägt vor:

CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);

und ich führe die folgende Abfrage aus:

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;

Die Abfrage funktioniert, ist jedoch sehr langsam, wenn Sie Hunderte von Namen haben. Außerdem habe ich vielleicht ein bisschen SQL vergessen, aber ich verstehe nicht, warum ich die Bedingung nicht verwenden kannand sim > .8 ohne einen Fehler "Spaltensim existiert nicht" zu bekommen.

Ich hätte gerne einen Hinweis, um die Abfrage zu beschleunigen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage