Мне нужно создать ранжирование аналогичных строк в таблице.
У меня есть следующая таблица
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
, не получив ошибку "column sim does not exist".
Мне бы хотелось, чтобы запрос был быстрее.