美文网首页PostgreSQL
PostgreSQL 的全文检索系统之进阶 (二)

PostgreSQL 的全文检索系统之进阶 (二)

作者: 求知久久编程学院 | 来源:发表于2020-01-16 14:47 被阅读0次

    1. 前言

    这一篇文章简要介绍了PostgreSQL的全文检索系统之基本介绍(一),这一节来介绍一些额外的功能,比如排名,比如高亮等。

    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

    完结。

    下一篇PostgreSQL 的全文检索系统之中文支持 (三)

    相关文章

      网友评论

        本文标题:PostgreSQL 的全文检索系统之进阶 (二)

        本文链接:https://www.haomeiwen.com/subject/ilvfzctx.html