У меня есть куча (меньше тысяч) строк в таблице postgres. В каждой строке есть поле content
. Я хочу быстро найти похожие строки. Насколько я понимаю, postgres может сделать это сам по себе, но пока все мои усилия были медленными.
В настоящее время я делаю следующее:
SELECT SIMILARITY($1, content) AS sim, id
FROM posts
WHERE id != $2
ORDER BY sim DESC
LIMIT $3
OFFSET $4;
Где $ 1 - текущее содержимое строки, с которой я хочу найти похожие строки, $ 2 - текущий идентификатор строки, а $ 3 и $ 4 - произвольные ограничения (обычно $ 3 - 5, а $ 4 - 0).
В настоящее время у меня есть следующий индекс, но я понятия не имею, работает ли он.
CREATE INDEX content_gin_idx ON posts USING GIN(content gin_trgm_ops);