pg_bigm 处理中间模糊匹配 like ‘%xxoo%‘
os: centos 7.4.1708
db: postgresql 10.11
pg_trgm 需要3个关键字才能使用到该索引,如果关键字只有1-2个或者更多,那就需要用到 pg_bigm。
pg_bigm 可以理解为 pg_trgm PLUS。
版本
# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
#
#
# yum list installed |grep -i postgresql
postgresql10.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-contrib.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-debuginfo.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-devel.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-docs.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-libs.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-odbc.x86_64 12.00.0000-1PGDG.rhel7 @pgdg10
postgresql10-plperl.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-plpython.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-pltcl.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-server.x86_64 10.11-2PGDG.rhel7 @pgdg10
postgresql10-tcl.x86_64 2.4.0-1.rhel7 @pgdg10
postgresql10-tcl-debuginfo.x86_64 2.3.1-1.rhel7 @pgdg10
postgresql10-test.x86_64 10.11-2PGDG.rhel7 @pgdg10 # su - postgres
Last login: Wed Jan 15 18:34:12 CST 2020 on pts/0
$
$
$ psql -c "select version();"version
----------------------------------------------------------------------------------------------------------PostgreSQL 10.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
下载安装
# su - postgres
$ git clone git://git.osdn.net/gitroot/pgbigm/pg_bigm.git
$ cd pg_bigm/
$ git branch -a
* masterremotes/origin/HEAD -> origin/masterremotes/origin/REL1_0_STABLEremotes/origin/REL1_1_STABLEremotes/origin/REL1_2_STABLEremotes/origin/master$ git checkout -b REL1_2_STABLE
$ make USE_PGXS=1 PG_CONFIG=/usr/pgsql-10/bin/pg_config
$ exit;# cd /var/lib/pgsql/pg_bigm/
# make USE_PGXS=1 PG_CONFIG=/usr/pgsql-10/bin/pg_config install/bin/mkdir -p '/usr/pgsql-10/lib'
/bin/mkdir -p '/usr/pgsql-10/share/extension'
/bin/mkdir -p '/usr/pgsql-10/share/extension'
/bin/install -c -m 755 pg_bigm.so '/usr/pgsql-10/lib/pg_bigm.so'
/bin/install -c -m 644 .//pg_bigm.control '/usr/pgsql-10/share/extension/'
/bin/install -c -m 644 .//pg_bigm--1.2.sql .//pg_bigm--1.1--1.2.sql .//pg_bigm--1.0--1.1.sql '/usr/pgsql-10/share/extension/'
创建 pg_bigm
# vi /var/lib/pgsql/10/data/postgresql.confshared_preload_libraries ='pg_bigm'# systemctl restart postgresql-10.service
# su - postgres
$ psqlpostgres=# create extension pg_bigm;postgres=# \dxList of installed extensionsName | Version | Schema | Description ------------------------------+---------+------------+------------------------------------------------------------------------------------------pg_bigm | 1.2 | public | text similarity measurement and index searching based on bigramsplpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)postgres=# select show_bigm('this is pg_bigm extension');show_bigm
-----------------------------------------------------------------------------------------{" e"," i"," p"," t",_b,bi,en,ex,g_,gm,hi,ig,io,is,"m ","n ",ns,on,pg,"s ",si,te,th,xt}
(1 row)
初步使用
postgres=# create table tmp_t0(id bigint,name varchar(100),memo varchar(100)
);postgres=# insert into tmp_t0
select id,md5(id::varchar) as name,md5(md5(id::varchar) ) as memo
from generate_series(1,1000000) as id; postgres=# create index idx_tmp_t0_name on tmp_t0 using gin(name gin_bigm_ops);
postgres=# explain select * from tmp_t0 where name like '%uuu%';QUERY PLAN
---------------------------------------------------------------------------------Bitmap Heap Scan on tmp_t0 (cost=24.77..400.04 rows=100 width=74)Recheck Cond: ((name)::text ~~ '%uuu%'::text)-> Bitmap Index Scan on idx_tmp_t0_name (cost=0.00..24.75 rows=100 width=0)Index Cond: ((name)::text ~~ '%uuu%'::text)
(4 rows)
postgres=# explain select * from tmp_t0 where name like '%uu%';QUERY PLAN
---------------------------------------------------------------------------------Bitmap Heap Scan on tmp_t0 (cost=24.77..400.04 rows=100 width=74)Recheck Cond: ((name)::text ~~ '%uu%'::text)-> Bitmap Index Scan on idx_tmp_t0_name (cost=0.00..24.75 rows=100 width=0)Index Cond: ((name)::text ~~ '%uu%'::text)
(4 rows)
postgres=# explain select * from tmp_t0 where name like '%u%';QUERY PLAN
-----------------------------------------------------------------------------------Bitmap Heap Scan on tmp_t0 (cost=1732.78..2108.04 rows=100 width=74)Recheck Cond: ((name)::text ~~ '%u%'::text)-> Bitmap Index Scan on idx_tmp_t0_name (cost=0.00..1732.75 rows=100 width=0)Index Cond: ((name)::text ~~ '%u%'::text)
(4 rows)
优秀
参考:
https://pgbigm.osdn.jp/index_en.html
https://pgbigm.osdn.jp/pg_bigm_en-1-2.html
http://git.osdn.net/view?p=pgbigm/pg_bigm.git;a=summary
git://git.osdn.net/gitroot/pgbigm/pg_bigm.git
pg_bigm 处理中间模糊匹配 like ‘%xxoo%‘相关推荐
- 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配
先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...
- python selenium xpath_python+selenium十四:xpath和contains模糊匹配
xpath可以以标签定位,也可以@任意属性: 如:以input标签定位:driver.find_element_by_xpath("//input[@id='kw']") 如:@t ...
- JQuery 模糊匹配
[属性名称] 匹配包含给定属性的元素 [att=value] 匹配包含给定属性的元素 [att*=value] 模糊匹配 [at ...
- grep 模糊匹配_vim 的模糊查找插件 LeaderF 新功能介绍(二)
前言 本文介绍自<vim 的模糊查找插件 LeaderF 新功能介绍>以后,LeaderF增加的一些新的功能. 异步grep Leaderf rg 此功能已经在<vim的grep插件 ...
- hive like 模糊匹配
类似: 在MYSQL里面我们可以这样的执行SQLselect a.Community,a.PID,b.spidertime,b.comm,b.showings,b.room from lianjia_ ...
- Excel 中使用SQL 语句查询数据(七)-----用LIKE 运算符进行模糊匹配查询
这篇博文要和大家分享的是用LIKE 运算符进行模糊匹配查询下图数据源商品代号包含数字的数据. 我们用Microsoft query连接数据源,步骤请参考本系列第一篇博文.语句如下图 其中 LIKE ' ...
- 通用算法-sql相似度模糊匹配
1.需求描述:数据库采集sql语句的记录表,包含记录编号-ID.日期时间-data.sql语句-statement,对表内每一条记录的sql语句和表内其他记录的sql语句进行模糊匹配,以顺序字符匹配方 ...
- RequestMapping || @RequestMapping 模糊匹配功能
一个方法处理一个请求 RequestMapping的其他属性 @RequestMapping 模糊匹配功能
- 利用SQL模糊匹配来验证字段是否是日期格式
最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 '2016-05-03 23:21:35.0', 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后 ...
- 【文本挖掘】反欺诈模糊匹配
问:一个可以做模糊匹配的字段,同一行的数据需要和其他行的数据分别比对,除了循环,有没有什么可以调高效率的方法. 方法一:数据量小的话,可以行列交换,矩阵运算 方法二:python内置map和reduc ...
最新文章
- TensorFlow什么的都弱爆了,强者只用Numpy搭建神经网络
- 内核对象——Windows核心编程学习手札系列之三
- Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案
- SRS流媒体服务器搭建+ffmpeg推流VLC取流观看
- java - 菱形输出
- 聚类性能度量指标及距离计算
- C/C++浮点数在内存中的存储方式《转》
- VS2003编译winSDK7.1中的DirectShow
- 【第一章:绪论】静态时序分析圣经翻译计划
- 全志8916平台MIPI_LCD调试方法
- android客户端功能,人人网Android版手机客户端功能详解
- y是x的平方的反比例函数_反比例函数的图像和性质 x不能为0y也不能为0所以反...
- python 绘制三国演义人物关系图
- Qt编写自定义控件54-时钟仪表盘
- MPU6050原始数据分析——学习笔记
- 设计模式学习总结系列应用实例
- 数据结构与算法10:图与图搜索
- java基本微信小程序的快递代收派送系统 uniapp小程序
- APP2SD图文储存卡分区教程
- 微信被封可私聊收费解封 是真的吗?腾讯官方回应来了
热门文章
- zk的watcher机制
- 混合高斯模型Gaussian Mixture Model(GMM)的EM(Expectation Maxium)求解代码
- MongoDB报错,Sort operation used more than the maximum 33554432 bytes of RAM.Add an index
- java鸭子类型_Python语言中的“Duck type”,鸭子,类型
- Effective-MultiType
- 华为深圳数据分析外包
- 使用telnet和ssh登录linux
- Python爬虫 获取雪球网股票讨论内容( 获取json文件的内容)
- 屌炸天的3D引擎OpenCASCADE的用法及案例
- halcon之屌炸天的自标定(2)