我对PostgreSQL、全文检索和 Trigram 的整个概念有点困惑。在我的全文检索查询中,我使用 tsvectors,就像这样:
SELECT * FROM articles
WHERE search_vector @@ plainto_tsquery('english', 'cat, bat, rat');
问题在于,此方法没有考虑到拼写错误。然后我开始阅读关于 Trigram和pg_trgm
的内容:
通过查看其他示例,似乎使用了trigram或向量,但从未同时使用。那么我的问题是:它们是否可以一起使用?如果可以,如何使用?trigram是否可以替代全文检索?trigram是否更准确?trigram的性能如何?
%
和@@
之间的区别。如果您的目标是查找包含英语(或任何您拥有字典的已知语言)的文档,则需要全文搜索。如果您的目标是将整个字段与具有一定容错率的字符串进行匹配,以便处理拼写错误,则应使用pg_trgm。 - Chris Farmiloe