F.49. pg_tsparser
pg_tsparser — это расширение Postgres Pro для текстового поиска. Это расширение меняет стандартную стратегию разбора текста для слов, включающих:
подчёркивания
цифры и буквы, разделённые знаком минуса
В дополнение к отдельным частям слова, возвращаемых по умолчанию, pg_tsparser также возвращает всё слово.
F.49.1. Установка и настройка
Расширение pg_tsparser входит в состав Postgres Pro. Чтобы задействовать pg_tsparser, установив Postgres Pro, создайте расширение pg_tsparser в каждой базе данных, где вы планируете его использовать:
CREATE EXTENSION pg_tsparser;
Активировав pg_tsparser, вы можете создавать собственные конфигурации текстового поиска. Вместе с pg_tsparser можно использовать любой имеющийся словарь.
Например, так можно создать конфигурацию english_ts для английского языка:
CREATE TEXT SEARCH CONFIGURATION english_ts (
PARSER = tsparser
);
COMMENT ON TEXT SEARCH CONFIGURATION english_ts IS 'text search configuration for english language';
ALTER TEXT SEARCH CONFIGURATION english_ts
ADD MAPPING FOR email, file, float, host, hword_numpart, int,
numhword, numword, sfloat, uint, url, url_path, version
WITH simple;
ALTER TEXT SEARCH CONFIGURATION english_ts
ADD MAPPING FOR asciiword, asciihword, hword_asciipart,
word, hword, hword_part
WITH english_stem;F.49.2. Примеры
Следующие примеры иллюстрируют различия в результатах поиска, возвращаемых анализатором текста pg_tsparser и стандартным анализатором:
SELECT to_tsvector('english', 'pg_trgm') as def_parser,
to_tsvector('english_ts', 'pg_trgm') as new_parser;
def_parser | new_parser
-----------------+-----------------------------
'pg':1 'trgm':2 | 'pg':2 'pg_trgm':1 'trgm':3
(1 row)
SELECT to_tsvector('english', '123-abc') as def_parser,
to_tsvector('english_ts', '123-abc') as new_parser;
def_parser | new_parser
-----------------+-----------------------------
'123':1 'abc':2 | '123':2 '123-abc':1 'abc':3
(1 row)
SELECT to_tsvector('english', 'rel-3.2-A') as def_parser,
to_tsvector('english_ts', 'rel-3.2-A') as new_parser;
def_parser | new_parser
------------------+-------------------------------
'-3.2':2 'rel':1 | '3.2':3 'rel':2 'rel-3.2-a':1
(1 row)См. также
F.49.3. Авторы
Postgres Professional, Москва, Россия
F.49. pg_tsparser
pg_tsparser is a Postgres Pro extension for text search. This extension modifies the default text parsing strategy for words that include:
underscores
numbers and letters separated by the hyphen character
In addition to separate word parts returned by default, pg_tsparser also returns the whole word.
F.49.1. Installation and Setup
pg_tsparser is included into the Postgres Pro distribution. To enable pg_tsparser, once Postgres Pro is installed, create the pg_tsparser extension for each database you are planning to use:
CREATE EXTENSION pg_tsparser;
Once pg_tsparser is enabled, you can create your own text search configuration. In addition to pg_tsparser, you can use any available dictionary.
For example, you can create english_ts configuration for the English language, as follows:
CREATE TEXT SEARCH CONFIGURATION english_ts (
PARSER = tsparser
);
COMMENT ON TEXT SEARCH CONFIGURATION english_ts IS 'text search configuration for english language';
ALTER TEXT SEARCH CONFIGURATION english_ts
ADD MAPPING FOR email, file, float, host, hword_numpart, int,
numhword, numword, sfloat, uint, url, url_path, version
WITH simple;
ALTER TEXT SEARCH CONFIGURATION english_ts
ADD MAPPING FOR asciiword, asciihword, hword_asciipart,
word, hword, hword_part
WITH english_stem;
F.49.2. Examples
The following examples illustrate the difference in search results returned by pg_tsparser and the default parser:
SELECT to_tsvector('english', 'pg_trgm') as def_parser,
to_tsvector('english_ts', 'pg_trgm') as new_parser;
def_parser | new_parser
-----------------+-----------------------------
'pg':1 'trgm':2 | 'pg':2 'pg_trgm':1 'trgm':3
(1 row)
SELECT to_tsvector('english', '123-abc') as def_parser,
to_tsvector('english_ts', '123-abc') as new_parser;
def_parser | new_parser
-----------------+-----------------------------
'123':1 'abc':2 | '123':2 '123-abc':1 'abc':3
(1 row)
SELECT to_tsvector('english', 'rel-3.2-A') as def_parser,
to_tsvector('english_ts', 'rel-3.2-A') as new_parser;
def_parser | new_parser
------------------+-------------------------------
'-3.2':2 'rel':1 | '3.2':3 'rel':2 'rel-3.2-a':1
(1 row)
See Also
F.49.3. Authors
Postgres Professional, Moscow, Russia