9.13. Функции и операторы текстового поиска

В Таблице 9-37, Таблице 9-38 и Таблице 9-39 собраны все существующие функции и операторы, предназначенные для полнотекстового поиска. Во всех деталях возможности полнотекстового поиска в PostgreSQL описаны в Главе 12.

Таблица 9-37. Операторы текстового поиска

ОператорОписаниеПримерРезультат
@@ tsvector соответствует tsquery ? to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat') t
@@@ устаревший синоним для @@ to_tsvector('fat cats ate rats') @@@ to_tsquery('cat & rat') t
|| объединяет два значения tsvector 'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector 'a':1 'b':2,5 'c':3 'd':4
&& логическое И (AND) двух запросов tsquery 'fat | rat'::tsquery && 'cat'::tsquery ( 'fat' | 'rat' ) & 'cat'
|| логическое ИЛИ (OR) двух запросов tsquery 'fat | rat'::tsquery || 'cat'::tsquery ( 'fat' | 'rat' ) | 'cat'
!! отрицание запроса tsquery !! 'cat'::tsquery !'cat'
@> запрос tsquery включает другой? 'cat'::tsquery @> 'cat & rat'::tsquery f
<@ запрос tsquery включён в другой? 'cat'::tsquery <@ 'cat & rat'::tsquery t

Замечание: Операторы включения tsquery рассматривают только лексемы двух запросов, игнорируя операторы их сочетания.

В дополнение к операторам, перечисленным в этой таблице, для типов tsvector и tsquery определены обычные операторы сравнения для B-дерева (=, < и т. д.). Они не очень полезны для поиска, но позволяют, в частности, создавать индексы для столбцов этих типов.

Таблица 9-38. Функции текстового поиска

ФункцияТип результатаОписаниеПримерРезультат
get_current_ts_config() regconfig получает конфигурацию текстового поиска по умолчанию get_current_ts_config() english
length(tsvector) integer число лексем в значении tsvector length('fat:2,4 cat:3 rat:5A'::tsvector) 3
numnode(tsquery) integer число лексем и операторов в запросе tsquery numnode('(fat & rat) | cat'::tsquery) 5
plainto_tsquery([конфигурация regconfig ,] запрос text) tsquery выдаёт значение tsquery, игнорируя пунктуацию plainto_tsquery('english', 'The Fat Rats') 'fat' & 'rat'
querytree(запрос tsquery) text получает индексируемую часть запроса tsquery querytree('foo & ! bar'::tsquery) 'foo'
setweight(tsvector, "char") tsvector назначает веса каждому элементу значения tsvector setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A') 'cat':3A 'fat':2A,4A 'rat':5A
strip(tsvector) tsvector убирает позиции и веса из значения tsvector strip('fat:2,4 cat:3 rat:5A'::tsvector) 'cat' 'fat' 'rat'
to_tsquery([конфигурация regconfig ,] запрос text) tsquery нормализует слова и переводит их в tsquery to_tsquery('english', 'The & Fat & Rats') 'fat' & 'rat'
to_tsvector([конфигурация regconfig ,] документ text) tsvector сокращает текст документа до значения tsvector to_tsvector('english', 'The Fat Rats') 'fat':2 'rat':3
ts_headline([конфигурация regconfig,] документ text, запрос tsquery [, параметры text]) text выводит фрагмент, соответствующий запросу ts_headline('x y z', 'z'::tsquery) x y <b>z</b>
ts_rank([веса float4[],] вектор tsvector, запрос tsquery [, нормализация integer]) float4 вычисляет ранг документа по отношению к запросу ts_rank(textsearch, query) 0.818
ts_rank_cd([веса float4[],] вектор tsvector, запрос tsquery [, нормализация integer]) float4 вычисляет ранг документа по отношению к запросу, используя плотность покрытия (CDR) ts_rank_cd('{0.1, 0.2, 0.4, 1.0}', textsearch, query) 2.01317
ts_rewrite(запрос tsquery, цель tsquery, замена tsquery) tsquery заменяет целевой подзапрос подстановкой ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery) 'b' & ( 'foo' | 'bar' )
ts_rewrite(запрос tsquery, выборка text) tsquery заменяет элементы запроса, выбирая цели и подстановки командой SELECT SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases') 'b' & ( 'foo' | 'bar' )
tsvector_update_trigger() trigger триггерная функция для автоматического изменения столбца типа tsvector CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.​swedish', title, body)
tsvector_update_trigger_column() trigger триггерная функция для автоматического изменения столбца типа tsvector CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, configcol, title, body)

Замечание: Все функции текстового поиска, принимающие необязательный аргумент regconfig, будут использовать конфигурацию, указанную в параметре default_text_search_config, когда этот аргумент опущен.

Функции в Таблице 9-39 перечислены отдельно, так как они не очень полезны в традиционных операциях поиска. Они предназначены в основном для разработки и отладки новых конфигураций текстового поиска.

Таблица 9-39. Функции отладки текстового поиска

ФункцияТип результатаОписаниеПримерРезультат
ts_debug([конфигурация regconfig,] документ text, OUT псевдоним text, OUT описание text, OUT фрагмент text, OUT словари regdictionary[], OUT словарь regdictionary, OUT лексемы text[]) setof record проверяет конфигурацию ts_debug('english', 'The Brightest supernovaes') (asciiword,"Word, all ASCII",The,{​english_stem​},​english_stem,{}) ...
ts_lexize(словарь regdictionary, фрагмент text) text[] проверяет словарь ts_lexize('english_stem', 'stars') {star}
ts_parse(имя_анализатора text, документ text, OUT код_фрагмента integer, OUT фрагмент text) setof record проверяет анализатор ts_parse('default', 'foo - bar') (1,foo) ...
ts_parse(oid_анализатора oid, документ text, OUT код_фрагмента integer, OUT фрагмент text) setof record проверяет анализатор ts_parse(3722, 'foo - bar') (1,foo) ...
ts_token_type(имя_анализатора text, OUT код_фрагмента integer, OUT псевдоним text, OUT описание text) setof record получает типы фрагментов, определённые анализатором ts_token_type('default') (1,asciiword,"Word, all ASCII") ...
ts_token_type(oid_анализатора oid, OUT код_фрагмента integer, OUT псевдоним text, OUT описание text) setof record получает типы фрагментов, определённые анализатором ts_token_type(3722) (1,asciiword,"Word, all ASCII") ...
ts_stat(sql_запрос text, [веса text,] OUT слово text, OUT число_док integer, OUT число_вхожд integer) setof record получает статистику столбца tsvector ts_stat('SELECT vector from apod') (foo,10,15) ...