首页 文章 精选 留言 我的

精选列表

搜索[PostgreSQL],共4374篇文章
优秀的个人博客,低调大师

PostgreSQL如何对某行记录进行模糊查询

在某些场景下,我们可能需要对表的某行字段进行查询。 例如BI报表的下拉框,用户可能会勾选多个条件进行查询,那么我们查询会很麻烦。 例如: bill@bill=>create table test1(c1 int,c2 text,c3 text,c4 text); CREATE TABLE bill@bill=>insert into test1 values(1,'post','china','bill'); INSERT 0 1 如果我们要查询该表某行包含china的记录,我们可能需要这么去写: select * from test1 where c1 ~ 'china' or c2 ~ 'china' or ... 可以看到这样写会相当麻烦,而且性能也不尽人意。 那么我们有什么办法能解决这类问题呢? 全文检索,我们可以通过行级别的全文检索来处理这类问题。 例子: 这里我们以pg_scws分词插件来演示。 下载地址:https://github.com/jaiminpan/pg_scws 安装: git clone https://github.com/jaiminpan/pg_scws cd pg_scws USE_PGXS=1 make && make install 以上面的表为例,我们可以将改行记录转成一个全文检索的文本: bill@bill=>select to_tsvector('scwscfg',test1::text) from test1; to_tsvector --------------------------------------- '1':1 'bill':4 'china':3 'post':2 (1 row) 查询: bill@bill=> select to_tsvector('scwscfg',test1::text) @@ to_tsquery('post & china') from test1; ?column? ---------- t (1 row) 至此,我们实现了对行级记录的全文检索查询,接着让我们再创建行级全文检索的索引来加速查询。 首先我们需要创建immutable类型的函数。 bill@bill=> create or replace function f1(regconfig,text) returns tsvector as $$ bill$# select to_tsvector($1,$2); bill$# $$ language sql immutable strict; CREATE FUNCTION 需要将record_out和textin函数转为immutable类型: bill@bill=>alter function record_out(record) immutable; ALTER FUNCTION bill@bill=>alter function textin(cstring) immutable; ALTER FUNCTION 创建索引: bill@bill=> create index idx_test1 on test1 using gin (f1('scwscfg'::regconfig,test1::text)) ; CREATE INDEX 查询测试: bill@bill=>select * from test1 where f1('scwscfg'::regconfig,test1::text) @@ to_tsquery('china') ; c1 | c2 | c3 | c4 ----+------+-------+------ 1 | post | china | bill (1 row) 验证是否可以使用索引: bill@bill=>set enable_seqscan = off; SET bill@bill=> explain select * from test1 where f1('scwscfg'::regconfig,test1::text) @@ to_tsquery('china') ; QUERY PLAN ------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on test1 (cost=2.85..4.67 rows=1 width=100) Recheck Cond: (to_tsvector('scwscfg'::regconfig, (test1.*)::text) @@ to_tsquery('china'::text)) -> Bitmap Index Scan on idx_test1 (cost=0.00..2.85 rows=1 width=0) Index Cond: (to_tsvector('scwscfg'::regconfig, (test1.*)::text) @@ to_tsquery('china'::text)) (4 rows) 参考链接: https://github.com/jaiminpan/pg_scws http://www.postgres.cn/docs/13/textsearch.html

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册