]> begriffs open source - ai-pg/blob - full-docs/src/sgml/html/functions-textsearch.html
WIP: toc builder
[ai-pg] / full-docs / src / sgml / html / functions-textsearch.html
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>9.13. Text Search Functions and Operators</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="functions-net.html" title="9.12. Network Address Functions and Operators" /><link rel="next" href="functions-uuid.html" title="9.14. UUID Functions" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">9.13. Text Search Functions and Operators</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="functions-net.html" title="9.12. Network Address Functions and Operators">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="functions.html" title="Chapter 9. Functions and Operators">Up</a></td><th width="60%" align="center">Chapter 9. Functions and Operators</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="functions-uuid.html" title="9.14. UUID Functions">Next</a></td></tr></table><hr /></div><div class="sect1" id="FUNCTIONS-TEXTSEARCH"><div class="titlepage"><div><div><h2 class="title" style="clear: both">9.13. Text Search Functions and Operators <a href="#FUNCTIONS-TEXTSEARCH" class="id_link">#</a></h2></div></div></div><a id="id-1.5.8.19.2" class="indexterm"></a><a id="id-1.5.8.19.3" class="indexterm"></a><p>
3    <a class="xref" href="functions-textsearch.html#TEXTSEARCH-OPERATORS-TABLE" title="Table 9.42. Text Search Operators">Table 9.42</a>,
4    <a class="xref" href="functions-textsearch.html#TEXTSEARCH-FUNCTIONS-TABLE" title="Table 9.43. Text Search Functions">Table 9.43</a> and
5    <a class="xref" href="functions-textsearch.html#TEXTSEARCH-FUNCTIONS-DEBUG-TABLE" title="Table 9.44. Text Search Debugging Functions">Table 9.44</a>
6    summarize the functions and operators that are provided
7    for full text searching.  See <a class="xref" href="textsearch.html" title="Chapter 12. Full Text Search">Chapter 12</a> for a detailed
8    explanation of <span class="productname">PostgreSQL</span>'s text search
9    facility.
10   </p><div class="table" id="TEXTSEARCH-OPERATORS-TABLE"><p class="title"><strong>Table 9.42. Text Search Operators</strong></p><div class="table-contents"><table class="table" summary="Text Search Operators" border="1"><colgroup><col /></colgroup><thead><tr><th class="func_table_entry"><p class="func_signature">
11         Operator
12        </p>
13        <p>
14         Description
15        </p>
16        <p>
17         Example(s)
18        </p></th></tr></thead><tbody><tr><td class="func_table_entry"><p class="func_signature">
19         <code class="type">tsvector</code> <code class="literal">@@</code> <code class="type">tsquery</code>
20         → <code class="returnvalue">boolean</code>
21        </p>
22        <p class="func_signature">
23         <code class="type">tsquery</code> <code class="literal">@@</code> <code class="type">tsvector</code>
24         → <code class="returnvalue">boolean</code>
25        </p>
26        <p>
27         Does <code class="type">tsvector</code> match <code class="type">tsquery</code>?
28         (The arguments can be given in either order.)
29        </p>
30        <p>
31         <code class="literal">to_tsvector('fat cats ate rats') @@ to_tsquery('cat &amp; rat')</code>
32         → <code class="returnvalue">t</code>
33        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
34         <code class="type">text</code> <code class="literal">@@</code> <code class="type">tsquery</code>
35         → <code class="returnvalue">boolean</code>
36        </p>
37        <p>
38         Does text string, after implicit invocation
39         of <code class="function">to_tsvector()</code>, match <code class="type">tsquery</code>?
40        </p>
41        <p>
42         <code class="literal">'fat cats ate rats' @@ to_tsquery('cat &amp; rat')</code>
43         → <code class="returnvalue">t</code>
44        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
45         <code class="type">tsvector</code> <code class="literal">||</code> <code class="type">tsvector</code>
46         → <code class="returnvalue">tsvector</code>
47        </p>
48        <p>
49         Concatenates two <code class="type">tsvector</code>s.  If both inputs contain
50         lexeme positions, the second input's positions are adjusted
51         accordingly.
52        </p>
53        <p>
54         <code class="literal">'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector</code>
55         → <code class="returnvalue">'a':1 'b':2,5 'c':3 'd':4</code>
56        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
57         <code class="type">tsquery</code> <code class="literal">&amp;&amp;</code> <code class="type">tsquery</code>
58         → <code class="returnvalue">tsquery</code>
59        </p>
60        <p>
61         ANDs two <code class="type">tsquery</code>s together, producing a query that
62         matches documents that match both input queries.
63        </p>
64        <p>
65         <code class="literal">'fat | rat'::tsquery &amp;&amp; 'cat'::tsquery</code>
66         → <code class="returnvalue">( 'fat' | 'rat' ) &amp; 'cat'</code>
67        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
68         <code class="type">tsquery</code> <code class="literal">||</code> <code class="type">tsquery</code>
69         → <code class="returnvalue">tsquery</code>
70        </p>
71        <p>
72         ORs two <code class="type">tsquery</code>s together, producing a query that
73         matches documents that match either input query.
74        </p>
75        <p>
76         <code class="literal">'fat | rat'::tsquery || 'cat'::tsquery</code>
77         → <code class="returnvalue">'fat' | 'rat' | 'cat'</code>
78        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
79         <code class="literal">!!</code> <code class="type">tsquery</code>
80         → <code class="returnvalue">tsquery</code>
81        </p>
82        <p>
83         Negates a <code class="type">tsquery</code>, producing a query that matches
84         documents that do not match the input query.
85        </p>
86        <p>
87         <code class="literal">!! 'cat'::tsquery</code>
88         → <code class="returnvalue">!'cat'</code>
89        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
90         <code class="type">tsquery</code> <code class="literal">&lt;-&gt;</code> <code class="type">tsquery</code>
91         → <code class="returnvalue">tsquery</code>
92        </p>
93        <p>
94         Constructs a phrase query, which matches if the two input queries
95         match at successive lexemes.
96        </p>
97        <p>
98         <code class="literal">to_tsquery('fat') &lt;-&gt; to_tsquery('rat')</code>
99         → <code class="returnvalue">'fat' &lt;-&gt; 'rat'</code>
100        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
101         <code class="type">tsquery</code> <code class="literal">@&gt;</code> <code class="type">tsquery</code>
102         → <code class="returnvalue">boolean</code>
103        </p>
104        <p>
105         Does first <code class="type">tsquery</code> contain the second?  (This considers
106         only whether all the lexemes appearing in one query appear in the
107         other, ignoring the combining operators.)
108        </p>
109        <p>
110         <code class="literal">'cat'::tsquery @&gt; 'cat &amp; rat'::tsquery</code>
111         → <code class="returnvalue">f</code>
112        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
113         <code class="type">tsquery</code> <code class="literal">&lt;@</code> <code class="type">tsquery</code>
114         → <code class="returnvalue">boolean</code>
115        </p>
116        <p>
117         Is first <code class="type">tsquery</code> contained in the second?  (This
118         considers only whether all the lexemes appearing in one query appear
119         in the other, ignoring the combining operators.)
120        </p>
121        <p>
122         <code class="literal">'cat'::tsquery &lt;@ 'cat &amp; rat'::tsquery</code>
123         → <code class="returnvalue">t</code>
124        </p>
125        <p>
126         <code class="literal">'cat'::tsquery &lt;@ '!cat &amp; rat'::tsquery</code>
127         → <code class="returnvalue">t</code>
128        </p></td></tr></tbody></table></div></div><br class="table-break" /><p>
129      In addition to these specialized operators, the usual comparison
130      operators shown in <a class="xref" href="functions-comparison.html#FUNCTIONS-COMPARISON-OP-TABLE" title="Table 9.1. Comparison Operators">Table 9.1</a> are
131      available for types <code class="type">tsvector</code> and <code class="type">tsquery</code>.
132      These are not very
133      useful for text searching but allow, for example, unique indexes to be
134      built on columns of these types.
135     </p><div class="table" id="TEXTSEARCH-FUNCTIONS-TABLE"><p class="title"><strong>Table 9.43. Text Search Functions</strong></p><div class="table-contents"><table class="table" summary="Text Search Functions" border="1"><colgroup><col /></colgroup><thead><tr><th class="func_table_entry"><p class="func_signature">
136         Function
137        </p>
138        <p>
139         Description
140        </p>
141        <p>
142         Example(s)
143        </p></th></tr></thead><tbody><tr><td class="func_table_entry"><p class="func_signature">
144         <a id="id-1.5.8.19.7.2.2.1.1.1.1" class="indexterm"></a>
145         <code class="function">array_to_tsvector</code> ( <code class="type">text[]</code> )
146         → <code class="returnvalue">tsvector</code>
147        </p>
148        <p>
149         Converts an array of text strings to a <code class="type">tsvector</code>.
150         The given strings are used as lexemes as-is, without further
151         processing.  Array elements must not be empty strings
152         or <code class="literal">NULL</code>.
153        </p>
154        <p>
155         <code class="literal">array_to_tsvector('{fat,cat,rat}'::text[])</code>
156         → <code class="returnvalue">'cat' 'fat' 'rat'</code>
157        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
158         <a id="id-1.5.8.19.7.2.2.2.1.1.1" class="indexterm"></a>
159         <code class="function">get_current_ts_config</code> ( )
160         → <code class="returnvalue">regconfig</code>
161        </p>
162        <p>
163         Returns the OID of the current default text search configuration
164         (as set by <a class="xref" href="runtime-config-client.html#GUC-DEFAULT-TEXT-SEARCH-CONFIG">default_text_search_config</a>).
165        </p>
166        <p>
167         <code class="literal">get_current_ts_config()</code>
168         → <code class="returnvalue">english</code>
169        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
170         <a id="id-1.5.8.19.7.2.2.3.1.1.1" class="indexterm"></a>
171         <code class="function">length</code> ( <code class="type">tsvector</code> )
172         → <code class="returnvalue">integer</code>
173        </p>
174        <p>
175         Returns the number of lexemes in the <code class="type">tsvector</code>.
176        </p>
177        <p>
178         <code class="literal">length('fat:2,4 cat:3 rat:5A'::tsvector)</code>
179         → <code class="returnvalue">3</code>
180        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
181         <a id="id-1.5.8.19.7.2.2.4.1.1.1" class="indexterm"></a>
182         <code class="function">numnode</code> ( <code class="type">tsquery</code> )
183         → <code class="returnvalue">integer</code>
184        </p>
185        <p>
186         Returns the number of lexemes plus operators in
187         the <code class="type">tsquery</code>.
188        </p>
189        <p>
190         <code class="literal">numnode('(fat &amp; rat) | cat'::tsquery)</code>
191         → <code class="returnvalue">5</code>
192        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
193         <a id="id-1.5.8.19.7.2.2.5.1.1.1" class="indexterm"></a>
194         <code class="function">plainto_tsquery</code> (
195         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
196         <em class="parameter"><code>query</code></em> <code class="type">text</code> )
197         → <code class="returnvalue">tsquery</code>
198        </p>
199        <p>
200         Converts text to a <code class="type">tsquery</code>, normalizing words according to
201         the specified or default configuration.  Any punctuation in the string
202         is ignored (it does not determine query operators).  The resulting
203         query matches documents containing all non-stopwords in the text.
204        </p>
205        <p>
206         <code class="literal">plainto_tsquery('english', 'The Fat Rats')</code>
207         → <code class="returnvalue">'fat' &amp; 'rat'</code>
208        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
209         <a id="id-1.5.8.19.7.2.2.6.1.1.1" class="indexterm"></a>
210         <code class="function">phraseto_tsquery</code> (
211         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
212         <em class="parameter"><code>query</code></em> <code class="type">text</code> )
213         → <code class="returnvalue">tsquery</code>
214        </p>
215        <p>
216         Converts text to a <code class="type">tsquery</code>, normalizing words according to
217         the specified or default configuration.  Any punctuation in the string
218         is ignored (it does not determine query operators).  The resulting
219         query matches phrases containing all non-stopwords in the text.
220        </p>
221        <p>
222         <code class="literal">phraseto_tsquery('english', 'The Fat Rats')</code>
223         → <code class="returnvalue">'fat' &lt;-&gt; 'rat'</code>
224        </p>
225        <p>
226         <code class="literal">phraseto_tsquery('english', 'The Cat and Rats')</code>
227         → <code class="returnvalue">'cat' &lt;2&gt; 'rat'</code>
228        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
229         <a id="id-1.5.8.19.7.2.2.7.1.1.1" class="indexterm"></a>
230         <code class="function">websearch_to_tsquery</code> (
231         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
232         <em class="parameter"><code>query</code></em> <code class="type">text</code> )
233         → <code class="returnvalue">tsquery</code>
234        </p>
235        <p>
236         Converts text to a <code class="type">tsquery</code>, normalizing words according
237         to the specified or default configuration.  Quoted word sequences are
238         converted to phrase tests.  The word <span class="quote">“<span class="quote">or</span>”</span> is understood
239         as producing an OR operator, and a dash produces a NOT operator;
240         other punctuation is ignored.
241         This approximates the behavior of some common web search tools.
242        </p>
243        <p>
244         <code class="literal">websearch_to_tsquery('english', '"fat rat" or cat dog')</code>
245         → <code class="returnvalue">'fat' &lt;-&gt; 'rat' | 'cat' &amp; 'dog'</code>
246        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
247         <a id="id-1.5.8.19.7.2.2.8.1.1.1" class="indexterm"></a>
248         <code class="function">querytree</code> ( <code class="type">tsquery</code> )
249         → <code class="returnvalue">text</code>
250        </p>
251        <p>
252         Produces a representation of the indexable portion of
253         a <code class="type">tsquery</code>.  A result that is empty or
254         just <code class="literal">T</code> indicates a non-indexable query.
255        </p>
256        <p>
257         <code class="literal">querytree('foo &amp; ! bar'::tsquery)</code>
258         → <code class="returnvalue">'foo'</code>
259        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
260         <a id="id-1.5.8.19.7.2.2.9.1.1.1" class="indexterm"></a>
261         <code class="function">setweight</code> ( <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>, <em class="parameter"><code>weight</code></em> <code class="type">"char"</code> )
262         → <code class="returnvalue">tsvector</code>
263        </p>
264        <p>
265         Assigns the specified <em class="parameter"><code>weight</code></em> to each element
266         of the <em class="parameter"><code>vector</code></em>.
267        </p>
268        <p>
269         <code class="literal">setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A')</code>
270         → <code class="returnvalue">'cat':3A 'fat':2A,4A 'rat':5A</code>
271        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
272         <a id="id-1.5.8.19.7.2.2.10.1.1.1" class="indexterm"></a>
273         <code class="function">setweight</code> ( <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>, <em class="parameter"><code>weight</code></em> <code class="type">"char"</code>, <em class="parameter"><code>lexemes</code></em> <code class="type">text[]</code> )
274         → <code class="returnvalue">tsvector</code>
275        </p>
276        <p>
277         Assigns the specified <em class="parameter"><code>weight</code></em> to elements
278         of the <em class="parameter"><code>vector</code></em> that are listed
279         in <em class="parameter"><code>lexemes</code></em>.
280         The strings in <em class="parameter"><code>lexemes</code></em> are taken as lexemes
281         as-is, without further processing.  Strings that do not match any
282         lexeme in <em class="parameter"><code>vector</code></em> are ignored.
283        </p>
284        <p>
285         <code class="literal">setweight('fat:2,4 cat:3 rat:5,6B'::tsvector, 'A', '{cat,rat}')</code>
286         → <code class="returnvalue">'cat':3A 'fat':2,4 'rat':5A,6A</code>
287        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
288         <a id="id-1.5.8.19.7.2.2.11.1.1.1" class="indexterm"></a>
289         <code class="function">strip</code> ( <code class="type">tsvector</code> )
290         → <code class="returnvalue">tsvector</code>
291        </p>
292        <p>
293         Removes positions and weights from the <code class="type">tsvector</code>.
294        </p>
295        <p>
296         <code class="literal">strip('fat:2,4 cat:3 rat:5A'::tsvector)</code>
297         → <code class="returnvalue">'cat' 'fat' 'rat'</code>
298        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
299         <a id="id-1.5.8.19.7.2.2.12.1.1.1" class="indexterm"></a>
300         <code class="function">to_tsquery</code> (
301         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
302         <em class="parameter"><code>query</code></em> <code class="type">text</code> )
303         → <code class="returnvalue">tsquery</code>
304        </p>
305        <p>
306         Converts text to a <code class="type">tsquery</code>, normalizing words according to
307         the specified or default configuration.  The words must be combined
308         by valid <code class="type">tsquery</code> operators.
309        </p>
310        <p>
311         <code class="literal">to_tsquery('english', 'The &amp; Fat &amp; Rats')</code>
312         → <code class="returnvalue">'fat' &amp; 'rat'</code>
313        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
314         <a id="id-1.5.8.19.7.2.2.13.1.1.1" class="indexterm"></a>
315         <code class="function">to_tsvector</code> (
316         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
317          <em class="parameter"><code>document</code></em> <code class="type">text</code> )
318         → <code class="returnvalue">tsvector</code>
319        </p>
320        <p>
321         Converts text to a <code class="type">tsvector</code>, normalizing words according
322         to the specified or default configuration.  Position information is
323         included in the result.
324        </p>
325        <p>
326         <code class="literal">to_tsvector('english', 'The Fat Rats')</code>
327         → <code class="returnvalue">'fat':2 'rat':3</code>
328        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
329         <code class="function">to_tsvector</code> (
330         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
331         <em class="parameter"><code>document</code></em> <code class="type">json</code> )
332         → <code class="returnvalue">tsvector</code>
333        </p>
334        <p class="func_signature">
335         <code class="function">to_tsvector</code> (
336         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
337         <em class="parameter"><code>document</code></em> <code class="type">jsonb</code> )
338         → <code class="returnvalue">tsvector</code>
339        </p>
340        <p>
341         Converts each string value in the JSON document to
342         a <code class="type">tsvector</code>, normalizing words according to the specified
343         or default configuration.  The results are then concatenated in
344         document order to produce the output.  Position information is
345         generated as though one stopword exists between each pair of string
346         values.  (Beware that <span class="quote">“<span class="quote">document order</span>”</span> of the fields of a
347         JSON object is implementation-dependent when the input
348         is <code class="type">jsonb</code>; observe the difference in the examples.)
349        </p>
350        <p>
351         <code class="literal">to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::json)</code>
352         → <code class="returnvalue">'dog':5 'fat':2 'rat':3</code>
353        </p>
354        <p>
355         <code class="literal">to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::jsonb)</code>
356         → <code class="returnvalue">'dog':1 'fat':4 'rat':5</code>
357        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
358         <a id="id-1.5.8.19.7.2.2.15.1.1.1" class="indexterm"></a>
359         <code class="function">json_to_tsvector</code> (
360         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
361         <em class="parameter"><code>document</code></em> <code class="type">json</code>,
362         <em class="parameter"><code>filter</code></em> <code class="type">jsonb</code> )
363         → <code class="returnvalue">tsvector</code>
364        </p>
365        <p class="func_signature">
366         <a id="id-1.5.8.19.7.2.2.15.1.2.1" class="indexterm"></a>
367         <code class="function">jsonb_to_tsvector</code> (
368         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
369         <em class="parameter"><code>document</code></em> <code class="type">jsonb</code>,
370         <em class="parameter"><code>filter</code></em> <code class="type">jsonb</code> )
371         → <code class="returnvalue">tsvector</code>
372        </p>
373        <p>
374         Selects each item in the JSON document that is requested by
375         the <em class="parameter"><code>filter</code></em> and converts each one to
376         a <code class="type">tsvector</code>, normalizing words according to the specified
377         or default configuration.  The results are then concatenated in
378         document order to produce the output.  Position information is
379         generated as though one stopword exists between each pair of selected
380         items.  (Beware that <span class="quote">“<span class="quote">document order</span>”</span> of the fields of a
381         JSON object is implementation-dependent when the input
382         is <code class="type">jsonb</code>.)
383         The <em class="parameter"><code>filter</code></em> must be a <code class="type">jsonb</code>
384         array containing zero or more of these keywords:
385         <code class="literal">"string"</code> (to include all string values),
386         <code class="literal">"numeric"</code> (to include all numeric values),
387         <code class="literal">"boolean"</code> (to include all boolean values),
388         <code class="literal">"key"</code> (to include all keys), or
389         <code class="literal">"all"</code> (to include all the above).
390         As a special case, the <em class="parameter"><code>filter</code></em> can also be a
391         simple JSON value that is one of these keywords.
392        </p>
393        <p>
394         <code class="literal">json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]')</code>
395         → <code class="returnvalue">'123':5 'fat':2 'rat':3</code>
396        </p>
397        <p>
398         <code class="literal">json_to_tsvector('english', '{"cat": "The Fat Rats", "dog": 123}'::json, '"all"')</code>
399         → <code class="returnvalue">'123':9 'cat':1 'dog':7 'fat':4 'rat':5</code>
400        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
401         <a id="id-1.5.8.19.7.2.2.16.1.1.1" class="indexterm"></a>
402         <code class="function">ts_delete</code> ( <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>, <em class="parameter"><code>lexeme</code></em> <code class="type">text</code> )
403         → <code class="returnvalue">tsvector</code>
404        </p>
405        <p>
406         Removes any occurrence of the given <em class="parameter"><code>lexeme</code></em>
407         from the <em class="parameter"><code>vector</code></em>.
408         The <em class="parameter"><code>lexeme</code></em> string is treated as a lexeme as-is,
409         without further processing.
410        </p>
411        <p>
412         <code class="literal">ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat')</code>
413         → <code class="returnvalue">'cat':3 'rat':5A</code>
414        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
415         <code class="function">ts_delete</code> ( <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>, <em class="parameter"><code>lexemes</code></em> <code class="type">text[]</code> )
416         → <code class="returnvalue">tsvector</code>
417        </p>
418        <p>
419         Removes any occurrences of the lexemes
420         in <em class="parameter"><code>lexemes</code></em>
421         from the <em class="parameter"><code>vector</code></em>.
422         The strings in <em class="parameter"><code>lexemes</code></em> are taken as lexemes
423         as-is, without further processing.  Strings that do not match any
424         lexeme in <em class="parameter"><code>vector</code></em> are ignored.
425        </p>
426        <p>
427         <code class="literal">ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat'])</code>
428         → <code class="returnvalue">'cat':3</code>
429        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
430         <a id="id-1.5.8.19.7.2.2.18.1.1.1" class="indexterm"></a>
431         <code class="function">ts_filter</code> ( <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>, <em class="parameter"><code>weights</code></em> <code class="type">"char"[]</code> )
432         → <code class="returnvalue">tsvector</code>
433        </p>
434        <p>
435         Selects only elements with the given <em class="parameter"><code>weights</code></em>
436         from the <em class="parameter"><code>vector</code></em>.
437        </p>
438        <p>
439         <code class="literal">ts_filter('fat:2,4 cat:3b,7c rat:5A'::tsvector, '{a,b}')</code>
440         → <code class="returnvalue">'cat':3B 'rat':5A</code>
441        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
442         <a id="id-1.5.8.19.7.2.2.19.1.1.1" class="indexterm"></a>
443         <code class="function">ts_headline</code> (
444         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
445         <em class="parameter"><code>document</code></em> <code class="type">text</code>,
446         <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>
447         [<span class="optional">, <em class="parameter"><code>options</code></em> <code class="type">text</code> </span>] )
448         → <code class="returnvalue">text</code>
449        </p>
450        <p>
451         Displays, in an abbreviated form, the match(es) for
452         the <em class="parameter"><code>query</code></em> in
453         the <em class="parameter"><code>document</code></em>, which must be raw text not
454         a <code class="type">tsvector</code>.  Words in the document are normalized
455         according to the specified or default configuration before matching to
456         the query.  Use of this function is discussed in
457         <a class="xref" href="textsearch-controls.html#TEXTSEARCH-HEADLINE" title="12.3.4. Highlighting Results">Section 12.3.4</a>, which also describes the
458         available <em class="parameter"><code>options</code></em>.
459        </p>
460        <p>
461         <code class="literal">ts_headline('The fat cat ate the rat.', 'cat')</code>
462         → <code class="returnvalue">The fat &lt;b&gt;cat&lt;/b&gt; ate the rat.</code>
463        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
464         <code class="function">ts_headline</code> (
465         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
466         <em class="parameter"><code>document</code></em> <code class="type">json</code>,
467         <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>
468         [<span class="optional">, <em class="parameter"><code>options</code></em> <code class="type">text</code> </span>] )
469         → <code class="returnvalue">text</code>
470        </p>
471        <p class="func_signature">
472         <code class="function">ts_headline</code> (
473         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
474         <em class="parameter"><code>document</code></em> <code class="type">jsonb</code>,
475         <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>
476         [<span class="optional">, <em class="parameter"><code>options</code></em> <code class="type">text</code> </span>] )
477         → <code class="returnvalue">text</code>
478        </p>
479        <p>
480         Displays, in an abbreviated form, match(es) for
481         the <em class="parameter"><code>query</code></em> that occur in string values
482         within the JSON <em class="parameter"><code>document</code></em>.
483         See <a class="xref" href="textsearch-controls.html#TEXTSEARCH-HEADLINE" title="12.3.4. Highlighting Results">Section 12.3.4</a> for more details.
484        </p>
485        <p>
486         <code class="literal">ts_headline('{"cat":"raining cats and dogs"}'::jsonb, 'cat')</code>
487         → <code class="returnvalue">{"cat": "raining &lt;b&gt;cats&lt;/b&gt; and dogs"}</code>
488        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
489         <a id="id-1.5.8.19.7.2.2.21.1.1.1" class="indexterm"></a>
490         <code class="function">ts_rank</code> (
491         [<span class="optional"> <em class="parameter"><code>weights</code></em> <code class="type">real[]</code>, </span>]
492         <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>,
493         <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>
494         [<span class="optional">, <em class="parameter"><code>normalization</code></em> <code class="type">integer</code> </span>] )
495         → <code class="returnvalue">real</code>
496        </p>
497        <p>
498         Computes a score showing how well
499         the <em class="parameter"><code>vector</code></em> matches
500         the <em class="parameter"><code>query</code></em>.  See
501         <a class="xref" href="textsearch-controls.html#TEXTSEARCH-RANKING" title="12.3.3. Ranking Search Results">Section 12.3.3</a> for details.
502        </p>
503        <p>
504         <code class="literal">ts_rank(to_tsvector('raining cats and dogs'), 'cat')</code>
505         → <code class="returnvalue">0.06079271</code>
506        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
507         <a id="id-1.5.8.19.7.2.2.22.1.1.1" class="indexterm"></a>
508         <code class="function">ts_rank_cd</code> (
509         [<span class="optional"> <em class="parameter"><code>weights</code></em> <code class="type">real[]</code>, </span>]
510         <em class="parameter"><code>vector</code></em> <code class="type">tsvector</code>,
511         <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>
512         [<span class="optional">, <em class="parameter"><code>normalization</code></em> <code class="type">integer</code> </span>] )
513         → <code class="returnvalue">real</code>
514        </p>
515        <p>
516         Computes a score showing how well
517         the <em class="parameter"><code>vector</code></em> matches
518         the <em class="parameter"><code>query</code></em>, using a cover density
519         algorithm.  See <a class="xref" href="textsearch-controls.html#TEXTSEARCH-RANKING" title="12.3.3. Ranking Search Results">Section 12.3.3</a> for details.
520        </p>
521        <p>
522         <code class="literal">ts_rank_cd(to_tsvector('raining cats and dogs'), 'cat')</code>
523         → <code class="returnvalue">0.1</code>
524        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
525         <a id="id-1.5.8.19.7.2.2.23.1.1.1" class="indexterm"></a>
526         <code class="function">ts_rewrite</code> ( <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>,
527         <em class="parameter"><code>target</code></em> <code class="type">tsquery</code>,
528         <em class="parameter"><code>substitute</code></em> <code class="type">tsquery</code> )
529         → <code class="returnvalue">tsquery</code>
530        </p>
531        <p>
532         Replaces occurrences of <em class="parameter"><code>target</code></em>
533         with <em class="parameter"><code>substitute</code></em>
534         within the <em class="parameter"><code>query</code></em>.
535         See <a class="xref" href="textsearch-features.html#TEXTSEARCH-QUERY-REWRITING" title="12.4.2.1. Query Rewriting">Section 12.4.2.1</a> for details.
536        </p>
537        <p>
538         <code class="literal">ts_rewrite('a &amp; b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery)</code>
539         → <code class="returnvalue">'b' &amp; ( 'foo' | 'bar' )</code>
540        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
541         <code class="function">ts_rewrite</code> ( <em class="parameter"><code>query</code></em> <code class="type">tsquery</code>,
542         <em class="parameter"><code>select</code></em> <code class="type">text</code> )
543         → <code class="returnvalue">tsquery</code>
544        </p>
545        <p>
546         Replaces portions of the <em class="parameter"><code>query</code></em> according to
547         target(s) and substitute(s) obtained by executing
548         a <code class="command">SELECT</code> command.
549         See <a class="xref" href="textsearch-features.html#TEXTSEARCH-QUERY-REWRITING" title="12.4.2.1. Query Rewriting">Section 12.4.2.1</a> for details.
550        </p>
551        <p>
552         <code class="literal">SELECT ts_rewrite('a &amp; b'::tsquery, 'SELECT t,s FROM aliases')</code>
553         → <code class="returnvalue">'b' &amp; ( 'foo' | 'bar' )</code>
554        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
555         <a id="id-1.5.8.19.7.2.2.25.1.1.1" class="indexterm"></a>
556         <code class="function">tsquery_phrase</code> ( <em class="parameter"><code>query1</code></em> <code class="type">tsquery</code>, <em class="parameter"><code>query2</code></em> <code class="type">tsquery</code> )
557         → <code class="returnvalue">tsquery</code>
558        </p>
559        <p>
560         Constructs a phrase query that searches
561         for matches of <em class="parameter"><code>query1</code></em>
562         and <em class="parameter"><code>query2</code></em> at successive lexemes (same
563         as <code class="literal">&lt;-&gt;</code> operator).
564        </p>
565        <p>
566         <code class="literal">tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'))</code>
567         → <code class="returnvalue">'fat' &lt;-&gt; 'cat'</code>
568        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
569         <code class="function">tsquery_phrase</code> ( <em class="parameter"><code>query1</code></em> <code class="type">tsquery</code>, <em class="parameter"><code>query2</code></em> <code class="type">tsquery</code>, <em class="parameter"><code>distance</code></em> <code class="type">integer</code> )
570         → <code class="returnvalue">tsquery</code>
571        </p>
572        <p>
573         Constructs a phrase query that searches
574         for matches of <em class="parameter"><code>query1</code></em> and
575         <em class="parameter"><code>query2</code></em> that occur exactly
576         <em class="parameter"><code>distance</code></em> lexemes apart.
577        </p>
578        <p>
579         <code class="literal">tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10)</code>
580         → <code class="returnvalue">'fat' &lt;10&gt; 'cat'</code>
581        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
582         <a id="id-1.5.8.19.7.2.2.27.1.1.1" class="indexterm"></a>
583         <code class="function">tsvector_to_array</code> ( <code class="type">tsvector</code> )
584         → <code class="returnvalue">text[]</code>
585        </p>
586        <p>
587         Converts a <code class="type">tsvector</code> to an array of lexemes.
588        </p>
589        <p>
590         <code class="literal">tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector)</code>
591         → <code class="returnvalue">{cat,fat,rat}</code>
592        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
593         <a id="id-1.5.8.19.7.2.2.28.1.1.1" class="indexterm"></a>
594         <code class="function">unnest</code> ( <code class="type">tsvector</code> )
595         → <code class="returnvalue">setof record</code>
596         ( <em class="parameter"><code>lexeme</code></em> <code class="type">text</code>,
597         <em class="parameter"><code>positions</code></em> <code class="type">smallint[]</code>,
598         <em class="parameter"><code>weights</code></em> <code class="type">text</code> )
599        </p>
600        <p>
601         Expands a <code class="type">tsvector</code> into a set of rows, one per lexeme.
602        </p>
603        <p>
604         <code class="literal">select * from unnest('cat:3 fat:2,4 rat:5A'::tsvector)</code>
605         → <code class="returnvalue"></code>
606 </p><pre class="programlisting">
607  lexeme | positions | weights
608 --------+-----------+---------
609  cat    | {3}       | {D}
610  fat    | {2,4}     | {D,D}
611  rat    | {5}       | {A}
612 </pre><p>
613        </p></td></tr></tbody></table></div></div><br class="table-break" /><div class="note"><h3 class="title">Note</h3><p>
614     All the text search functions that accept an optional <code class="type">regconfig</code>
615     argument will use the configuration specified by
616     <a class="xref" href="runtime-config-client.html#GUC-DEFAULT-TEXT-SEARCH-CONFIG">default_text_search_config</a>
617     when that argument is omitted.
618    </p></div><p>
619    The functions in
620    <a class="xref" href="functions-textsearch.html#TEXTSEARCH-FUNCTIONS-DEBUG-TABLE" title="Table 9.44. Text Search Debugging Functions">Table 9.44</a>
621    are listed separately because they are not usually used in everyday text
622    searching operations.  They are primarily helpful for development and
623    debugging of new text search configurations.
624   </p><div class="table" id="TEXTSEARCH-FUNCTIONS-DEBUG-TABLE"><p class="title"><strong>Table 9.44. Text Search Debugging Functions</strong></p><div class="table-contents"><table class="table" summary="Text Search Debugging Functions" border="1"><colgroup><col /></colgroup><thead><tr><th class="func_table_entry"><p class="func_signature">
625         Function
626        </p>
627        <p>
628         Description
629        </p>
630        <p>
631         Example(s)
632        </p></th></tr></thead><tbody><tr><td class="func_table_entry"><p class="func_signature">
633         <a id="id-1.5.8.19.10.2.2.1.1.1.1" class="indexterm"></a>
634         <code class="function">ts_debug</code> (
635         [<span class="optional"> <em class="parameter"><code>config</code></em> <code class="type">regconfig</code>, </span>]
636         <em class="parameter"><code>document</code></em> <code class="type">text</code> )
637         → <code class="returnvalue">setof record</code>
638         ( <em class="parameter"><code>alias</code></em> <code class="type">text</code>,
639         <em class="parameter"><code>description</code></em> <code class="type">text</code>,
640         <em class="parameter"><code>token</code></em> <code class="type">text</code>,
641         <em class="parameter"><code>dictionaries</code></em> <code class="type">regdictionary[]</code>,
642         <em class="parameter"><code>dictionary</code></em> <code class="type">regdictionary</code>,
643         <em class="parameter"><code>lexemes</code></em> <code class="type">text[]</code> )
644        </p>
645        <p>
646         Extracts and normalizes tokens from
647         the <em class="parameter"><code>document</code></em> according to the specified or
648         default text search configuration, and returns information about how
649         each token was processed.
650         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-CONFIGURATION-TESTING" title="12.8.1. Configuration Testing">Section 12.8.1</a> for details.
651        </p>
652        <p>
653         <code class="literal">ts_debug('english', 'The Brightest supernovaes')</code>
654         → <code class="returnvalue">(asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) ...</code>
655        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
656         <a id="id-1.5.8.19.10.2.2.2.1.1.1" class="indexterm"></a>
657         <code class="function">ts_lexize</code> ( <em class="parameter"><code>dict</code></em> <code class="type">regdictionary</code>, <em class="parameter"><code>token</code></em> <code class="type">text</code> )
658         → <code class="returnvalue">text[]</code>
659        </p>
660        <p>
661         Returns an array of replacement lexemes if the input token is known to
662         the dictionary, or an empty array if the token is known to the
663         dictionary but it is a stop word, or NULL if it is not a known word.
664         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-DICTIONARY-TESTING" title="12.8.3. Dictionary Testing">Section 12.8.3</a> for details.
665        </p>
666        <p>
667         <code class="literal">ts_lexize('english_stem', 'stars')</code>
668         → <code class="returnvalue">{star}</code>
669        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
670         <a id="id-1.5.8.19.10.2.2.3.1.1.1" class="indexterm"></a>
671         <code class="function">ts_parse</code> ( <em class="parameter"><code>parser_name</code></em> <code class="type">text</code>,
672         <em class="parameter"><code>document</code></em> <code class="type">text</code> )
673         → <code class="returnvalue">setof record</code>
674         ( <em class="parameter"><code>tokid</code></em> <code class="type">integer</code>,
675         <em class="parameter"><code>token</code></em> <code class="type">text</code> )
676        </p>
677        <p>
678         Extracts tokens from the <em class="parameter"><code>document</code></em> using the
679         named parser.
680         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-PARSER-TESTING" title="12.8.2. Parser Testing">Section 12.8.2</a> for details.
681        </p>
682        <p>
683         <code class="literal">ts_parse('default', 'foo - bar')</code>
684         → <code class="returnvalue">(1,foo) ...</code>
685        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
686         <code class="function">ts_parse</code> ( <em class="parameter"><code>parser_oid</code></em> <code class="type">oid</code>,
687         <em class="parameter"><code>document</code></em> <code class="type">text</code> )
688         → <code class="returnvalue">setof record</code>
689         ( <em class="parameter"><code>tokid</code></em> <code class="type">integer</code>,
690         <em class="parameter"><code>token</code></em> <code class="type">text</code> )
691        </p>
692        <p>
693         Extracts tokens from the <em class="parameter"><code>document</code></em> using a
694         parser specified by OID.
695         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-PARSER-TESTING" title="12.8.2. Parser Testing">Section 12.8.2</a> for details.
696        </p>
697        <p>
698         <code class="literal">ts_parse(3722, 'foo - bar')</code>
699         → <code class="returnvalue">(1,foo) ...</code>
700        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
701         <a id="id-1.5.8.19.10.2.2.5.1.1.1" class="indexterm"></a>
702         <code class="function">ts_token_type</code> ( <em class="parameter"><code>parser_name</code></em> <code class="type">text</code> )
703         → <code class="returnvalue">setof record</code>
704         ( <em class="parameter"><code>tokid</code></em> <code class="type">integer</code>,
705         <em class="parameter"><code>alias</code></em> <code class="type">text</code>,
706         <em class="parameter"><code>description</code></em> <code class="type">text</code> )
707        </p>
708        <p>
709         Returns a table that describes each type of token the named parser can
710         recognize.
711         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-PARSER-TESTING" title="12.8.2. Parser Testing">Section 12.8.2</a> for details.
712        </p>
713        <p>
714         <code class="literal">ts_token_type('default')</code>
715         → <code class="returnvalue">(1,asciiword,"Word, all ASCII") ...</code>
716        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
717         <code class="function">ts_token_type</code> ( <em class="parameter"><code>parser_oid</code></em> <code class="type">oid</code> )
718         → <code class="returnvalue">setof record</code>
719         ( <em class="parameter"><code>tokid</code></em> <code class="type">integer</code>,
720         <em class="parameter"><code>alias</code></em> <code class="type">text</code>,
721         <em class="parameter"><code>description</code></em> <code class="type">text</code> )
722        </p>
723        <p>
724         Returns a table that describes each type of token a parser specified
725         by OID can recognize.
726         See <a class="xref" href="textsearch-debugging.html#TEXTSEARCH-PARSER-TESTING" title="12.8.2. Parser Testing">Section 12.8.2</a> for details.
727        </p>
728        <p>
729         <code class="literal">ts_token_type(3722)</code>
730         → <code class="returnvalue">(1,asciiword,"Word, all ASCII") ...</code>
731        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
732         <a id="id-1.5.8.19.10.2.2.7.1.1.1" class="indexterm"></a>
733         <code class="function">ts_stat</code> ( <em class="parameter"><code>sqlquery</code></em> <code class="type">text</code>
734         [<span class="optional">, <em class="parameter"><code>weights</code></em> <code class="type">text</code> </span>] )
735         → <code class="returnvalue">setof record</code>
736         ( <em class="parameter"><code>word</code></em> <code class="type">text</code>,
737         <em class="parameter"><code>ndoc</code></em> <code class="type">integer</code>,
738         <em class="parameter"><code>nentry</code></em> <code class="type">integer</code> )
739        </p>
740        <p>
741         Executes the <em class="parameter"><code>sqlquery</code></em>, which must return a
742         single <code class="type">tsvector</code> column, and returns statistics about each
743         distinct lexeme contained in the data.
744         See <a class="xref" href="textsearch-features.html#TEXTSEARCH-STATISTICS" title="12.4.4. Gathering Document Statistics">Section 12.4.4</a> for details.
745        </p>
746        <p>
747         <code class="literal">ts_stat('SELECT vector FROM apod')</code>
748         → <code class="returnvalue">(foo,10,15) ...</code>
749        </p></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="functions-net.html" title="9.12. Network Address Functions and Operators">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="functions.html" title="Chapter 9. Functions and Operators">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="functions-uuid.html" title="9.14. UUID Functions">Next</a></td></tr><tr><td width="40%" align="left" valign="top">9.12. Network Address Functions and Operators </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 9.14. UUID Functions</td></tr></table></div></body></html>