在项目中,遇到了一个存储文本的字段, 页面上展示的时候, 是一个查询字段
之前用的 的是 ilike 这样的查询方法, 在数据量过100万的时候, 查询基本没有效率.
例如 " where content ilike '%more%';
通过学习pg的手册, 12 章节中的内容,
尝试了如下2中方法:
SELECT 'a fat cat sat on a more and ate a fat rat' :: tsvector @@ 'more' :: tsquery; 这种返回的结果为 t, ①
SELECT to_tsvector('dfsjalfjsl more dflasjfl top') @@ plainto_tsquery(' more '); 这种返回的结果为f, ②
特别注意如上的写法,经过大量数据的测试下, 使用了① 方法,
如果要写在 where 条件中,
例如 : wher content::tsvector@@'more'::tsquery
说明 : content 这个是你的文本存储的字段, 大概意思就是, 将字段做一次数据上的处理, tsvector 是那个做数据处理的函数,
'more' 是你要搜索的关键词, 这个没啥好解释的
使用的场景 :
1 ilike 比较适合模糊的匹配, 而本文提供的方法是一种比较精确的, 欢迎大家去测试
2 效率的问题, ilike 在数据量大的情况, 查询速度不是一般慢,数据量过100万的时候, 而本文提供的方法则速度很快,
暂时还没有测试出有没有其他未知的隐患, 欢迎大家来信交流学习.