Быстрый поиск похожих строк с помощью PostgreSQL

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

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

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 не существует».

Я бы хотел, чтобы любая подсказка ускорила выполнение запроса.

26
задан Erwin Brandstetter 24 January 2015 в 19:12
поделиться