В документации по триграмме postgres говорится:
Модуль pg_trgm предоставляет классы операторов индексов GiST и GIN, которые позволяют создавать индекс по текстовому столбцу для очень быстрого поиска сходства. Эти типы индексов поддерживают описанные выше операторы сходства и дополнительно поддерживают поиск по индексу на основе триграмм для запросов LIKE, ILIKE, ~ и ~*.
и показывает следующий пример:
SELECT t, word_similarity('word', t) AS sml
FROM test_trgm
WHERE 'word' <% t
ORDER BY sml DESC, t;
Потрясающий!
Однако при выполнении следующего запроса:
SELECT *
FROM place
WHERE word_similarity(place.name, '__SOME_STRING__') > 0.5
Созданный индекс не используется.
Однако при использовании операторов ILIKE
или %>
кажется, что индекс используется. Почему индекс не используется в функции word_similarity
?