Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PostgreSQL Search

4,183 views

Published on

PostgreSQL Search

Published in: Technology, Design
  • Be the first to comment

PostgreSQL Search

  1. 1. PostgreSQL Search Xiaonei ugc 陈臻
  2. 2. 目录 <ul><li>PostgreSQL </li></ul><ul><li>Bamboo 介绍(中文分词) </li></ul><ul><li>Tsearch2 介绍(全文索引) </li></ul><ul><li>KxGroup Search </li></ul>
  3. 3. Postgresql <ul><li>“ PostgreSQL 是一种特性非常齐全的自由软件的对象 - 关系性数据库管理系统( ORDBMS ),它的很多特性正是当今许多商业数据库的前身” -- 摘自 PostgreSQL 手册。 </li></ul>
  4. 4. Postgresql <ul><li>前身是始于 1977 年的 Ingres 项目 </li></ul><ul><li>从 1986 年开始, BSD 的 Michael Stonebraker 教授领导了称为 Postgres 的“后 Ingres” 项目,其主要目的是数据库管理系统的更高级研究,因此而产生了 PostgreSQL 的直接前身, Postgres ,而 PostgreSQL 的名字也是从 Postgres 项目继承过来的。 </li></ul>
  5. 5. MySQL <ul><li>1985 年只是当时的创始人为解决当时客户的问题开始写类似于数据库的一些软件。 </li></ul><ul><li>2000 年才作为开源软件进行开发。 </li></ul>
  6. 6. Postgresql Ingres 1977 Postgres 1980 Postgres95 1995 PostgreSQL 1996 中国香港的 Andrew Yu 和 Jolly Chen Michael Stonebraker 教授领导
  7. 7. PostgreSQL 特性 <ul><li>函数 / 存储过程 </li></ul><ul><li>索引 </li></ul><ul><li>触发器 </li></ul><ul><li>并发管理 /MVCC </li></ul><ul><li>规则 /RULE </li></ul><ul><li>数据类型 </li></ul><ul><li>用户定义对象 </li></ul><ul><li>继承 </li></ul><ul><li>ELSE </li></ul>
  8. 8. PostgreSQL 数据类型 <ul><li>PostgreSQL 支持非常广泛的数据类型,包括: </li></ul><ul><li>任意精度的数值类型 </li></ul><ul><li>无限长度的文本类型 </li></ul><ul><li>几何原语 </li></ul><ul><li>IPv4 和 IPv6 类型 </li></ul><ul><li>CIDR 块和 MAC 地质 </li></ul><ul><li>数组 </li></ul><ul><li>而且,用户还可以创建自己的类型,并且可以利用 GiST 框架把这些类型做成完全可索引的。比如来自 PostGIS 的地理信息系统( GIS )的数据类型。 </li></ul>
  9. 10. Bamboo <ul><li>bamboo 是一个中文语言处理系统。目前包括中文分词和词性标注部分。 </li></ul><ul><li>bamboo 提供了 C,PHP,PostgreSQL 的编程接口。 </li></ul><ul><li>Bamboo 训练统计 </li></ul>
  10. 12. Tsearch2 <ul><li>Tsearch2 - is the full text engine, fully integrated into PostgreSQL RDBMS. </li></ul><ul><li>Text Search is integrated into PostgreSQL 8.3 ! Read official text search documentation. </li></ul>
  11. 14. KxGroup Search <ul><li>select * from dbname where field_name @@ 'aa|bb' order by rank(field_name, 'aa|bb'); </li></ul><ul><li>  从这个 sql 字面意思讲解:从 dbname 这个表中查 field_name 匹配 aa 或者是 bb 的词,并且按照他们的匹配的 RANK 排序。 </li></ul>
  12. 15. KxGroup Search <ul><li>Tsvector : </li></ul><ul><li>SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;                       tsvector ----------------------------------------------------  'a' 'on' 'and' 'ate' 'cat' 'fat' 'mat' 'rat' 'sat'  </li></ul><ul><li>  通过 tsvector 把一个字符串按照空格进行分词,这可以把分词后的词按照出现的次数排成一排(还会按词长度)。 </li></ul><ul><li>SELECT to_tsvector('english', 'The Fat Rats');            to_tsvector   -----------------  'fat':2 'rat':3 </li></ul><ul><li>to_tsvector 函数来是 tsvector 规格化的,在其中可指定所使用的分词。 </li></ul>
  13. 16. KxGroup Search <ul><li>tsquery : </li></ul><ul><li>tsquery 是存储用于检索的词条 . 并且可以联合使用 boolean 操作符来连接 , & (AND), | (OR), and ! (NOT). 使用括号 (), 可以强制分为一组 . </li></ul><ul><li>  同时 ,tsquery 在做搜索的时候 , 也可以使用权重 , 并且每个词都可以使用一个或者多个权重标记 , 这样在检索的时候 , 会匹配相同权重的信息 . 跟上面的 tsvector 相同 ,tsquery 也有一个 to_tsquery 函数 . </li></ul>
  14. 17. KxGroup Search <ul><li>@@ : </li></ul><ul><li>在 postgresql 中全文检索匹配操作使用 @@ 操作符 , 如果一个 tsvector(document) 匹配到 tsquery(query) 则返回 true. </li></ul>
  15. 18. KxGroup Search <ul><li>GIN : </li></ul><ul><li>gin 是一种索引的名称,全文索引用的。 </li></ul><ul><li>我们可以通过创建 gin 索引来加速检索速度 . 例如 </li></ul><ul><li>CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body)); </li></ul>
  16. 19. KxGroup Search <ul><li>终结 : </li></ul><ul><li>select * from tabname where to_tsvector('chinesecfg',textname) @@ plainto_tsquery(' 搜点啥 ') order by ts_rank(to_tsvector('chinesecfg',textname),plainto_tsquery(' 搜点啥 ')) limit 10; </li></ul>
  17. 21. 参考资料 & 鸣谢 <ul><li>http://www.pgsqldb.org </li></ul><ul><li>bamboo 库的讨论组: http:// groups.google.com/group/nlpbamboo/topics </li></ul><ul><li>编译 http://ugc.d.xiaonei.com/index.php?title=Kaixin_groupSearch_design </li></ul>
  18. 22. THANKS!

×