postgres trigram 文档指出:
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
or%>
运算符时,似乎确实正在使用索引。为什么函数上没有使用索引word_similarity
?