# 2. 全文檢索系統之進階
#### 1. 前言
這一篇文章簡要介紹了[PostgreSQL的全文檢索系統之基本介紹(一)](http://www.rails365.net/articles/2015-09-29-postgresql-de-quan-wen-jian-suo-xi-tong-zhi-ji-ben-jie-shao-yi),這一節來介紹一些額外的功能,比如排名,比如高亮等。
#### 2. 解析文檔(Parsing Documents)
要查看一段文本是怎么被PostgreSQL分詞的,可以用to\_tsvector這個指令,是這樣使用的。
```
postgres=# SELECT to_tsvector('english', 'a fat cat sat on a mat - it ate a fat rats');
to_tsvector
-----------------------------------------------------
'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4
(1 row)
```
#### 3. 搜索結果排名(Ranking Search Results)
就是使用ts\_rank或ts\_rank\_cd按照匹配詞的出現次數做個排名。
例如:
```
rails365_pro=# select title, ts_rank(to_tsvector('english', body), to_tsquery('english', 'ruby')) AS rank from articles where to_tsvector('english', body) @@ to_tsquery('english', 'ruby')
order by rank desc;
title | rank
-----------------------------------------------------+-----------
使用mina來部署ruby on rails應用 | 0.0928561
登錄認證系統的進階使用 | 0.0906656
devise簡單入門教程 | 0.0889769
用exception_notification結合Slack或數據庫來捕獲異常 | 0.0889769
Mina的進階使用 | 0.0865452
使用backup來備份數據庫 | 0.0827456
用logrotate切割Ruby on rails日志 | 0.0759909
用OneAPM作為你的監控平臺 | 0.0759909
ruby | 0.0607927
(9 rows)
```
#### 4. 結果的高亮(Highlighting Results)
有時候你需要把搜索的關鍵詞高亮起來,就像谷歌,百度那樣,PostgreSQL默認就支持的。
**PostgreSQL**有一個指令**ts\_headline**就是來做這個事情的。
**ts\_headline**使用起來也簡單,看下面的例子:
```
rails365_pro=# select title,ts_headline('testzhcfg', title, to_tsquery('testzhcfg', 'mina')), ts_rank(to_tsvector('testzhcfg', title), to_tsquery('testzhcfg', 'mina')) AS rank from articles where to_tsvector('testzhcfg', body) @@ to_tsquery('testzhcfg', 'mina')
order by rank;
title | ts_headline | rank
---------------------------------+--------------------------------------+-----------
使用mina來部署ruby on rails應用 | 使用<b>mina</b>來部署rubyonrails應用 | 0.0607927
Mina的進階使用 | <b>Mina</b>的進階使用 | 0.0607927
(2 rows)
```
高亮的地方就用`<b></b>`包住了。
具體的內容可閱讀官方文檔[textsearch-controls](http://www.postgresql.org/docs/9.4/static/textsearch-controls.html)
完結。
下一篇[PostgreSQL 的全文檢索系統之中文支持 (三)](https://www.rails365.net/articles/postgresql-de-quan-wen-jian-suo-xi-tong-zhi-zhong-wen-zhi-chi-san)