Быстрый поиск похожих строк в PostgreSQL

Мне нужно создать рейтинг похожих строк в таблице.

У меня есть следующая таблица

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

В настоящее время я используюpg_trgm модуль, который предлагаетsimilarity функция, но у меня есть проблема эффективности. Я создал индекс какРуководство Postgres предлагает:

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

и я выполняю следующий запрос:

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;

Запрос работает, но очень медленно, когда у вас есть сотни имен. Более того, может быть, я немного забыл SQL, но не понимаю, почему не могу использовать условиеand sim > .8 без получения "столбца sim не существует"; ошибка.

Мне бы хотелось, чтобы любой запрос ускорил запрос.

Ответы на вопрос(1)

Ваш ответ на вопрос