在项目中,遇到了一个存储文本的字段, 页面上展现的时候, 是一个查询字段函数
以前用的 的是 ilike 这样的查询方法, 在数据量过100万的时候, 查询基本没有效率.学习
例如 " where content ilike '%more%'; 测试
经过学习pg的手册, 12 章节中的内容,spa
尝试了以下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万的时候, 而本文提供的方法则速度很快,
暂时尚未测试出有没有其余未知的隐患, 欢迎你们来信交流学习.
因为没有通过大量的测试,致使本文中以上的结论失效了,
在实际的项目中, 我用了 where to_tsvector(content)@@to_tsquery('more');
content 为要搜索 的表字段, more 为搜索的关键词,