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

В Таблице 9.37, Таблице 9.38 и Таблице 9.39 собраны все существующие функции и операторы, предназначенные для полнотекстового поиска. Во всех деталях возможности полнотекстового поиска в Postgres Pro описаны в Главе 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 предшествует tsqueryto_tsquery('fat') <-> to_tsquery('rat')'fat' <-> 'rat'
@>запрос tsquery включает другой?'cat'::tsquery @> 'cat & rat'::tsqueryf
<@запрос tsquery включён в другой?'cat'::tsquery <@ 'cat & rat'::tsqueryt

Примечание

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

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

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

ФункцияТип результатаОписаниеПримерРезультат
get_current_ts_config()regconfigполучает конфигурацию текстового поиска по умолчаниюget_current_ts_config()english
length(tsvector)integerчисло лексем в значении tsvectorlength('fat:2,4 cat:3 rat:5A'::tsvector)3
numnode(tsquery)integerчисло лексем и операторов в запросе tsquerynumnode('(fat & rat) | cat'::tsquery)5
plainto_tsquery([конфигурация regconfig ,] запрос text)tsqueryвыдаёт значение tsquery, игнорируя пунктуациюplainto_tsquery('english', 'The Fat Rats')'fat' & 'rat'
phraseto_tsquery([конфигурация regconfig ,] запрос text)tsqueryвыдаёт значение tsquery, игнорируя пунктуациюphraseto_tsquery('english', 'The Fat Rats')'fat' <-> 'rat'
querytree(запрос tsquery)textполучает индексируемую часть запроса tsqueryquerytree('foo & ! bar'::tsquery)'foo'
setweight(tsvector, "char")tsvectorназначает веса каждому элементу значения tsvectorsetweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A')'cat':3A 'fat':2A,4A 'rat':5A
setweight(tsquery, "char")tsqueryдобавляет веса каждому элементу значения tsquerysetweight('fat ? cat & rat:B'::tsquery, 'A')( 'fat':A ? 'cat':A ) & 'rat':AB
strip(tsvector)tsvectorубирает позиции и веса из значения tsvectorstrip('fat:2,4 cat:3 rat:5A'::tsvector)'cat' 'fat' 'rat'
to_tsquery([конфигурация regconfig ,] запрос text)tsqueryнормализует слова и переводит их в tsqueryto_tsquery('english', 'The & Fat & Rats')'fat' & 'rat'
to_tsvector([конфигурация regconfig ,] документ text)tsvectorсокращает текст документа до значения tsvectorto_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заменяет элементы запроса, выбирая цели и подстановки командой SELECTSELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases')'b' & ( 'foo' | 'bar' )
tsquery_phrase(запрос1 tsquery, запрос2 tsquery)tsqueryреализация оператора <-> (ПРЕДШЕСТВУЕТ)tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'))'fat' <-> 'cat'
tsquery_phrase(запрос1 tsquery, запрос2 tsquery, расстояние integer)tsqueryобъединение слов во фразу с указанием расстоянияtsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10)'fat' <10> 'cat'
tsvector_update_trigger()triggerтриггерная функция для автоматического изменения столбца типа tsvectorCREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.​swedish', title, body)
tsvector_update_trigger_column()triggerтриггерная функция для автоматического изменения столбца типа tsvectorCREATE 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получает статистику столбца tsvectorts_stat('SELECT vector from apod')(foo,10,15) ...