postgresql search

22
PostgreSQL Search Xiaonei ugc 陈陈

Upload: guestb75c3a

Post on 21-May-2015

3.859 views

Category:

Technology


0 download

DESCRIPTION

PostgreSQL Search

TRANSCRIPT

Page 1: PostgreSQL Search

PostgreSQL Search

Xiaonei ugc 陈臻

Page 2: PostgreSQL Search

目录

PostgreSQLBamboo 介绍(中文分词)Tsearch2 介绍(全文索引)KxGroup Search

Page 3: PostgreSQL Search

Postgresql

“PostgreSQL 是一种特性非常齐全的自由软件的对象 - 关系性数据库管理系统( ORDBMS ),它的很多特性正是当今许多商业数据库的前身”-- 摘自 PostgreSQL 手册。

Page 4: PostgreSQL Search

Postgresql

前身是始于 1977 年的 Ingres 项目 从 1986 年开始, BSD 的 Michael Stonebraker 教授领导了称为 Postgres 的“后 Ingres” 项目,其主要目的是数据库管理系统的更高级研究,因此而产生了 PostgreSQL 的直接前身, Postgres ,而 PostgreSQL 的名字也是从 Postgres 项目继承过来的。

Page 5: PostgreSQL Search

MySQL

1985 年只是当时的创始人为解决当时客户的问题开始写类似于数据库的一些软件。 2000 年才作为开源软件进行开发。

Page 6: PostgreSQL Search

Postgresql

Ingres1977

Postgres 1980

Postgres951995

PostgreSQL1996

中国香港的 Andrew Yu 和 Jolly Chen

Michael Stonebraker 教

授领导

Page 7: PostgreSQL Search

PostgreSQL特性

函数 / 存储过程索引触发器并发管理 /MVCC规则 /RULE数据类型用户定义对象继承ELSE

Page 8: PostgreSQL Search

PostgreSQL数据类型

PostgreSQL 支持非常广泛的数据类型,包括: 任意精度的数值类型 无限长度的文本类型 几何原语 IPv4 和 IPv6 类型 CIDR 块和 MAC 地质 数组

而且,用户还可以创建自己的类型,并且可以利用 GiST 框架把这些类型做成完全可索引的。比如来自 PostGIS 的地理信息系统( GIS )的数据类型。

Page 9: PostgreSQL Search
Page 10: PostgreSQL Search

Bamboo

bamboo 是一个中文语言处理系统。目前包括中文分词和词性标注部分。 bamboo 提供了 C,PHP,PostgreSQL 的编程接口。Bamboo训练统计

Page 11: PostgreSQL Search
Page 12: PostgreSQL Search

Tsearch2

Tsearch2 - is the full text engine, fully integrated into PostgreSQL RDBMS.Text Search is integrated into PostgreSQL 8.3 ! Read official text search documentation.

Page 13: PostgreSQL Search
Page 14: PostgreSQL Search

KxGroup Search

select * from dbname where field_name @@ 'aa|bb' order by rank(field_name, 'aa|bb'); 从这个 sql 字面意思讲解:从 dbname 这个表中查 field_name 匹配 aa 或者是 bb 的词,并且按照他们的匹配的 RANK 排序。

Page 15: PostgreSQL Search

KxGroup Search

Tsvector:SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector; tsvector---------------------------------------------------- 'a' 'on' 'and' 'ate' 'cat' 'fat' 'mat' 'rat' 'sat' 通过 tsvector 把一个字符串按照空格进行分词,这可以把分词后的词按照出现的次数排成一排(还会按词长度)。

SELECT to_tsvector('english', 'The Fat Rats'); to_tsvector ----------------- 'fat':2 'rat':3

to_tsvector 函数来是 tsvector 规格化的,在其中可指定所使用的分词。

Page 16: PostgreSQL Search

KxGroup Search

tsquery :tsquery 是存储用于检索的词条 . 并且可以联合使用 boolean 操作符来连接 , & (AND), | (OR), and ! (NOT). 使用括号 (), 可以强制分为一组 . 同时 ,tsquery 在做搜索的时候 , 也可以使用权重 , 并且每个词都可以使用一个或者多个权重标记 , 这样在检索的时候 , 会匹配相同权重的信息 .跟上面的 tsvector 相同 ,tsquery 也有一个to_tsquery 函数 .

Page 17: PostgreSQL Search

KxGroup Search

@@ :在 postgresql 中全文检索匹配操作使用 @@ 操作符 , 如果一个tsvector(document) 匹配到 tsquery(query)则返回 true.

Page 18: PostgreSQL Search

KxGroup Search

GIN :gin 是一种索引的名称,全文索引用的。

我们可以通过创建 gin 索引来加速检索速度 . 例如CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body));

Page 19: PostgreSQL Search

KxGroup Search

终结 :select * from tabname where to_tsvector('chinesecfg',textname) @@ plainto_tsquery(' 搜点啥 ') order by ts_rank(to_tsvector('chinesecfg',textname),plainto_tsquery(' 搜点啥 ')) limit 10;

Page 20: PostgreSQL Search
Page 21: PostgreSQL Search

参考资料 &鸣谢

http://www.pgsqldb.orgbamboo 库的讨论组: http://groups.google.com/group/nlpbamboo/topics 编译http://ugc.d.xiaonei.com/index.php?title=Kaixin_groupSearch_design

Page 22: PostgreSQL Search

THANKS!