mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-08 00:47:36 +08:00
This is advance preparation for introducing even more test modules; the easy solution is to add them to contrib, but that's bloated enough that it seems a good time to think of something different. Moved modules are dummy_seclabel, test_shm_mq, test_parser and worker_spi. (test_decoding was also a candidate, but there was too much opposition to moving that one. We can always reconsider later.)
62 lines
1.8 KiB
Plaintext
62 lines
1.8 KiB
Plaintext
test_parser is an example of a custom parser for full-text
|
|
search. It doesn't do anything especially useful, but can serve as
|
|
a starting point for developing your own parser.
|
|
|
|
test_parser recognizes words separated by white space,
|
|
and returns just two token types:
|
|
|
|
mydb=# SELECT * FROM ts_token_type('testparser');
|
|
tokid | alias | description
|
|
-------+-------+---------------
|
|
3 | word | Word
|
|
12 | blank | Space symbols
|
|
(2 rows)
|
|
|
|
These token numbers have been chosen to be compatible with the default
|
|
parser's numbering. This allows us to use its headline()
|
|
function, thus keeping the example simple.
|
|
|
|
Usage
|
|
=====
|
|
|
|
Installing the test_parser extension creates a text search
|
|
parser testparser. It has no user-configurable parameters.
|
|
|
|
You can test the parser with, for example,
|
|
|
|
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
|
|
|
|
Real-world use requires setting up a text search configuration
|
|
that uses the parser. For example,
|
|
|
|
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)
|