2015第42周六Pgsql全文索引

时间:2021-09-07 01:23:32

全文搜索通常也就是文本搜索,它可以提供满足查询的识别自然语言的能力,并且任意性地通过相关性查询进行排序。搜索最常见的类型就是找到所有包含给定的查询术语的记录,并且以相似性的查询顺序返回它们。

对于普通检索如~、~*、like和ilike操作的劣势:

1.对语言支持较弱,比如不能识别单词的复数形式,比如检索friend时不能检索出friends或者friendly。 

2.没有有效的分类和排序手段,检索出的结果排序功能不好。

3.缺少索引支持,查询速度慢,特别是两头加了两个%时根本就不走索引。

PostgreSQL在8.3.x版本后开始支持全文检索。执行步骤,主要分三步走: 
1.将文档分词(parsing documents into tokens) 
2.转换分词规则(converting tokens into lexemes),如去掉复数后缀s/es,以及加入stop词,使之不会在分词中出现,如常用的'的' 
3.按一定顺序查询的优化方式存储(storing preprocessed documents optimized for searching) tsvector存储,使用tsquery查询

在pgsql中,文档通常是一个数据库表中一行的文本字段,或者是这些字段的可能组合(级联),可能存储在多个表中或者动态的获得。也就是说,一个文档可以由索引的不同部分部分构成,它不一定非要作为一个整体存储。

中文检索的例子: http://my.oschina.net/Kenyon/blog/82305

其它:http://my.oschina.net/Kenyon/blog/80904

http://www.54chen.com/_linux_/postgresql-bamboo-lucene-part2.html