F.40. test_parser

test_parser 是一个自定义的全文搜索解析器的例子。它不做特别有用的工作,但是可以作为开发一个自己的解析器的起点。

test_parser 识别以空格分隔的单词,并且返回两种标记类型:

mydb=# SELECT * FROM ts_token_type('testparser');
 tokid | alias |  description
-------+-------+---------------
     3 | word  | Word
    12 | blank | Space symbols
(2 rows)

这些标记数字被选择来兼容默认的解析器编号。这让我们可以使用headline()函数,从而保持例子的简单。

F.40.1. 用法

安装test_parser扩展,创建一个文本搜索解析器testparser。它没有用户可配置参数。

你可以像下面的例子这样测试该解析器,

mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser');
 tokid | token
-------+--------
     3 | That's
    12 |
     3 | my
    12 |
     3 | first
    12 |
     3 | own
    12 |
     3 | parser

实际使用需要配置一个文本搜索配置项来使用这个解析器。例如,

mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
CREATE TEXT SEARCH CONFIGURATION

mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg
mydb-#   ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION

mydb=#  SELECT to_tsvector('testcfg', 'That''s my first own parser');
          to_tsvector
-------------------------------
 'that':1 'first':3 'parser':5
(1 row)

mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies',
mydb(#                    to_tsquery('testcfg', 'star'));
                           ts_headline
-----------------------------------------------------------------
 Supernovae <b>stars</b> are the brightest phenomena in galaxies
(1 row)