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%‘相关推荐

  1. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  2. python selenium xpath_python+selenium十四:xpath和contains模糊匹配

    xpath可以以标签定位,也可以@任意属性: 如:以input标签定位:driver.find_element_by_xpath("//input[@id='kw']") 如:@t ...

  3. JQuery 模糊匹配

    [属性名称]         匹配包含给定属性的元素       [att=value]       匹配包含给定属性的元素       [att*=value]     模糊匹配       [at ...

  4. grep 模糊匹配_vim 的模糊查找插件 LeaderF 新功能介绍(二)

    前言 本文介绍自<vim 的模糊查找插件 LeaderF 新功能介绍>以后,LeaderF增加的一些新的功能. 异步grep Leaderf rg 此功能已经在<vim的grep插件 ...

  5. hive like 模糊匹配

    类似: 在MYSQL里面我们可以这样的执行SQLselect a.Community,a.PID,b.spidertime,b.comm,b.showings,b.room from lianjia_ ...

  6. Excel 中使用SQL 语句查询数据(七)-----用LIKE 运算符进行模糊匹配查询

    这篇博文要和大家分享的是用LIKE 运算符进行模糊匹配查询下图数据源商品代号包含数字的数据. 我们用Microsoft query连接数据源,步骤请参考本系列第一篇博文.语句如下图 其中 LIKE ' ...

  7. 通用算法-sql相似度模糊匹配

    1.需求描述:数据库采集sql语句的记录表,包含记录编号-ID.日期时间-data.sql语句-statement,对表内每一条记录的sql语句和表内其他记录的sql语句进行模糊匹配,以顺序字符匹配方 ...

  8. RequestMapping || @RequestMapping 模糊匹配功能

    一个方法处理一个请求 RequestMapping的其他属性 @RequestMapping 模糊匹配功能

  9. 利用SQL模糊匹配来验证字段是否是日期格式

    最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 '2016-05-03 23:21:35.0', 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后 ...

  10. 【文本挖掘】反欺诈模糊匹配

    问:一个可以做模糊匹配的字段,同一行的数据需要和其他行的数据分别比对,除了循环,有没有什么可以调高效率的方法. 方法一:数据量小的话,可以行列交换,矩阵运算 方法二:python内置map和reduc ...

最新文章

  1. TensorFlow什么的都弱爆了,强者只用Numpy搭建神经网络
  2. 内核对象——Windows核心编程学习手札系列之三
  3. Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案
  4. SRS流媒体服务器搭建+ffmpeg推流VLC取流观看
  5. java - 菱形输出
  6. 聚类性能度量指标及距离计算
  7. C/C++浮点数在内存中的存储方式《转》
  8. VS2003编译winSDK7.1中的DirectShow
  9. 【第一章:绪论】静态时序分析圣经翻译计划
  10. 全志8916平台MIPI_LCD调试方法
  11. android客户端功能,人人网Android版手机客户端功能详解
  12. y是x的平方的反比例函数_反比例函数的图像和性质 x不能为0y也不能为0所以反...
  13. python 绘制三国演义人物关系图
  14. Qt编写自定义控件54-时钟仪表盘
  15. MPU6050原始数据分析——学习笔记
  16. 设计模式学习总结系列应用实例
  17. 数据结构与算法10:图与图搜索
  18. java基本微信小程序的快递代收派送系统 uniapp小程序
  19. APP2SD图文储存卡分区教程
  20. 微信被封可私聊收费解封 是真的吗?腾讯官方回应来了

热门文章

  1. zk的watcher机制
  2. 混合高斯模型Gaussian Mixture Model(GMM)的EM(Expectation Maxium)求解代码
  3. MongoDB报错,Sort operation used more than the maximum 33554432 bytes of RAM.Add an index
  4. java鸭子类型_Python语言中的“Duck type”,鸭子,类型
  5. Effective-MultiType
  6. 华为深圳数据分析外包
  7. 使用telnet和ssh登录linux
  8. Python爬虫 获取雪球网股票讨论内容( 获取json文件的内容)
  9. 屌炸天的3D引擎OpenCASCADE的用法及案例
  10. halcon之屌炸天的自标定(2)