Быстрый поиск похожих строк в 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 не существует"; ошибка.
Мне бы хотелось, чтобы любой запрос ускорил запрос.