Мне нужно создать ранжирование похожих строк в таблице.
У меня есть следующая таблица.
create table names (
name character varying(255)
);
В настоящее время я использую модуль pg_trgm, который предлагает функцию сходства
, но у меня есть проблема с эффективностью. Я создал индекс, подобный руководству 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, но я не понимаю, почему я не могу использовать условие и sim > .8
без получения ошибки «столбец sim не существует».
Я бы хотел, чтобы любая подсказка ускорила выполнение запроса.