暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为openGauss 查询重写

华为高斯 2020-06-01
1040

ts_rewrite函数族可以从tsquery中搜索一个特定的目标子查询,并在该子查询每次出现的地方都替换为另一个子查询。 实际上这只是通过字串替换而得到的一个特定tsquery版本。目标子查询和替换查询组合起来可以被认为是一个重写规则。一组类似的重写规则可以为搜索提供强大的帮助。例如,可以使用同义词扩大搜索范围(例如,new york, big apple, nyc, gotham)或限制搜索范围在用户直接感兴趣的热点话题上。

  • ts_rewrite (query tsquery, target tsquery, substitute tsquery) returns tsquery

    ts_rewrite的这种形式只适用于一个单一的重写规则:任何出现目标子查询的地方都被无条件替换。例如:

    ``` postgres=# SELECT ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'c'::tsquery); ts_rewrite


    'b' & 'c' ```

  • ts_rewrite (query tsquery, select text) returns tsquery

    ts_rewrite的这种形式接受一个起始查询和SQL查询命令。 这里的查询命令是文本字串形式,必须产生两个tsquery列。查询结果的每一行,第一个字段的值(目标子查询) 都会被第二个字段(替代子查询)替换。

    说明:
    当多个规则需要重写时,重写顺序非常重要; 因此在实践中需要使用ORDER BY将源查询按照某些字段进行排序。

    例如:举一个现实生活中天文学上的例子。我们将使用表驱动的重写规则扩大supernovae的查询范围:

    ``` postgres=# CREATE TABLE tsearch.aliases (id int, t tsquery, s tsquery);

    postgres=# INSERT INTO tsearch.aliases VALUES(1, to_tsquery('supernovae'), to_tsquery('supernovae|sn'));

    postgres=# SELECT ts_rewrite(to_tsquery('supernovae & crab'), 'SELECT t, s FROM tsearch.aliases');

           ts_rewrite
    
    复制

    'crab' & ( 'supernova' | 'sn' ) ```

    可以通过更新表修改重写规则:

    ``` postgres=# UPDATE tsearch.aliases SET s = to_tsquery('supernovae|sn & !nebulae') WHERE t = to_tsquery('supernovae');

    postgres=# SELECT ts_rewrite(to_tsquery('supernovae & crab'), 'SELECT t, s FROM tsearch.aliases');

                 ts_rewrite
    
    复制

    'crab' & ( 'supernova' | 'sn' & !'nebula' ) ```

    需要重写的规则越多,重写操作就越慢。因为它要检查每一个可能匹配的规则。为了过滤明显的非候选规则,可以使用tsquery类型的操作符来实现。在下面的例子中, 我们只选择那些可能与原始查询匹配的规则:

    ``` postgres=# SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM tsearch.aliases WHERE ''a & b''::tsquery @> t');

    ts_rewrite

    'b' & 'a' (1 row) postgres=# DROP TABLE tsearch.aliases; ```

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

文集目录
法律声明
发行说明
产品描述
技术白皮书
编译指导书
快速入门
安装指南
管理员指南
开发者指南
关于本文档
概述
数据库使用
应用程序开发教程
管理数据库安全
接口参考
导入数据
导出数据
AI特性
性能调优
配置运行参数
SQL参考
openGauss SQL
关键字
数据类型
常量与宏
函数和操作符
表达式
类型转换
全文检索
介绍
表和索引
控制文本搜索
附加功能
处理tsvector
处理查询
查询重写
收集文献统计
解析器
词典
配置示例
测试和调试文本搜索
限制约束
系统操作
事务控制
DDL语法一览表
DML语法一览表
DCL语法一览表
SQL语法
附录
用户自定义函数
存储过程
系统表和系统视图
DBE_PERF Schema
WDR Snapshot Schema
GUC参数说明
常见故障定位指南
SQL执行计划概述
详解
工具参考
术语表
暂无图片
获得了120次点赞
暂无图片
内容获得25次评论
暂无图片
获得了141次收藏
TA的专栏