Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / test / regress / expected / tsearch.out
blob04b75dc6d0b1b2bc7816ef993b53790d1340eabc
1 --
2 -- Sanity checks for text search catalogs
3 --
4 -- NB: we assume the oidjoins test will have caught any dangling links,
5 -- that is OID or REGPROC fields that are not zero and do not match some
6 -- row in the linked-to table.  However, if we want to enforce that a link
7 -- field can't be 0, we have to check it here.
8 -- Find unexpected zero link entries
9 SELECT oid, prsname
10 FROM pg_ts_parser
11 WHERE prsnamespace = 0 OR prsstart = 0 OR prstoken = 0 OR prsend = 0 OR
12       -- prsheadline is optional
13       prslextype = 0;
14  oid | prsname 
15 -----+---------
16 (0 rows)
18 SELECT oid, dictname
19 FROM pg_ts_dict
20 WHERE dictnamespace = 0 OR dictowner = 0 OR dicttemplate = 0;
21  oid | dictname 
22 -----+----------
23 (0 rows)
25 SELECT oid, tmplname
26 FROM pg_ts_template
27 WHERE tmplnamespace = 0 OR tmpllexize = 0;  -- tmplinit is optional
28  oid | tmplname 
29 -----+----------
30 (0 rows)
32 SELECT oid, cfgname
33 FROM pg_ts_config
34 WHERE cfgnamespace = 0 OR cfgowner = 0 OR cfgparser = 0;
35  oid | cfgname 
36 -----+---------
37 (0 rows)
39 SELECT mapcfg, maptokentype, mapseqno
40 FROM pg_ts_config_map
41 WHERE mapcfg = 0 OR mapdict = 0;
42  mapcfg | maptokentype | mapseqno 
43 --------+--------------+----------
44 (0 rows)
46 -- Look for pg_ts_config_map entries that aren't one of parser's token types
47 SELECT * FROM
48   ( SELECT oid AS cfgid, (ts_token_type(cfgparser)).tokid AS tokid
49     FROM pg_ts_config ) AS tt 
50 RIGHT JOIN pg_ts_config_map AS m
51     ON (tt.cfgid=m.mapcfg AND tt.tokid=m.maptokentype)
52 WHERE
53     tt.cfgid IS NULL OR tt.tokid IS NULL;
54  cfgid | tokid | mapcfg | maptokentype | mapseqno | mapdict 
55 -------+-------+--------+--------------+----------+---------
56 (0 rows)
58 -- test basic text search behavior without indexes, then with
59 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
60  count 
61 -------
62    158
63 (1 row)
65 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
66  count 
67 -------
68     17
69 (1 row)
71 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
72  count 
73 -------
74      6
75 (1 row)
77 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
78  count 
79 -------
80     98
81 (1 row)
83 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
84  count 
85 -------
86     23
87 (1 row)
89 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
90  count 
91 -------
92     39
93 (1 row)
95 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
96  count 
97 -------
98    494
99 (1 row)
101 create index wowidx on test_tsvector using gist (a);
102 SET enable_seqscan=OFF;
103 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
104  count 
105 -------
106    158
107 (1 row)
109 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
110  count 
111 -------
112     17
113 (1 row)
115 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
116  count 
117 -------
118      6
119 (1 row)
121 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
122  count 
123 -------
124     98
125 (1 row)
127 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
128  count 
129 -------
130     23
131 (1 row)
133 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
134  count 
135 -------
136     39
137 (1 row)
139 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
140  count 
141 -------
142    494
143 (1 row)
145 RESET enable_seqscan;
146 DROP INDEX wowidx;
147 CREATE INDEX wowidx ON test_tsvector USING gin (a);
148 SET enable_seqscan=OFF;
149 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
150  count 
151 -------
152    158
153 (1 row)
155 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
156  count 
157 -------
158     17
159 (1 row)
161 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
162  count 
163 -------
164      6
165 (1 row)
167 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
168  count 
169 -------
170     98
171 (1 row)
173 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
174  count 
175 -------
176     23
177 (1 row)
179 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
180  count 
181 -------
182     39
183 (1 row)
185 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
186  count 
187 -------
188    494
189 (1 row)
191   
192 RESET enable_seqscan;
193 INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
194 SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;
195  word | ndoc | nentry 
196 ------+------+--------
197  qq   |  108 |    108
198  qt   |  102 |    102
199  qe   |  100 |    100
200  qh   |   98 |     98
201  qw   |   98 |     98
202  qa   |   97 |     97
203  ql   |   94 |     94
204  qs   |   94 |     94
205  qi   |   92 |     92
206  qr   |   92 |     92
207 (10 rows)
209 SELECT * FROM ts_stat('SELECT a FROM test_tsvector', 'AB') ORDER BY ndoc DESC, nentry DESC, word;
210  word | ndoc | nentry 
211 ------+------+--------
212  DFG  |    1 |      2
213 (1 row)
215 --dictionaries and to_tsvector
216 SELECT ts_lexize('english_stem', 'skies');
217  ts_lexize 
218 -----------
219  {sky}
220 (1 row)
222 SELECT ts_lexize('english_stem', 'identity');
223  ts_lexize 
224 -----------
225  {ident}
226 (1 row)
228 SELECT * FROM ts_token_type('default');
229  tokid |      alias      |               description                
230 -------+-----------------+------------------------------------------
231      1 | asciiword       | Word, all ASCII
232      2 | word            | Word, all letters
233      3 | numword         | Word, letters and digits
234      4 | email           | Email address
235      5 | url             | URL
236      6 | host            | Host
237      7 | sfloat          | Scientific notation
238      8 | version         | Version number
239      9 | hword_numpart   | Hyphenated word part, letters and digits
240     10 | hword_part      | Hyphenated word part, all letters
241     11 | hword_asciipart | Hyphenated word part, all ASCII
242     12 | blank           | Space symbols
243     13 | tag             | XML tag
244     14 | protocol        | Protocol head
245     15 | numhword        | Hyphenated word, letters and digits
246     16 | asciihword      | Hyphenated word, all ASCII
247     17 | hword           | Hyphenated word, all letters
248     18 | url_path        | URL path
249     19 | file            | File or path name
250     20 | float           | Decimal notation
251     21 | int             | Signed integer
252     22 | uint            | Unsigned integer
253     23 | entity          | XML entity
254 (23 rows)
256 SELECT * FROM ts_parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/?  ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
257 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234
258 <i <b> wow  < jqw <> qwerty');
259  tokid |                token                 
260 -------+--------------------------------------
261     22 | 345
262     12 |  
263      1 | qwe
264     12 | @
265     19 | efd.r
266     12 |  ' 
267     14 | http://
268      6 | www.com
269     12 | / 
270     14 | http://
271      5 | aew.werc.ewr/?ad=qwe&dw
272      6 | aew.werc.ewr
273     18 | /?ad=qwe&dw
274     12 |  
275      5 | 1aew.werc.ewr/?ad=qwe&dw
276      6 | 1aew.werc.ewr
277     18 | /?ad=qwe&dw
278     12 |  
279      6 | 2aew.werc.ewr
280     12 |  
281     14 | http://
282      5 | 3aew.werc.ewr/?ad=qwe&dw
283      6 | 3aew.werc.ewr
284     18 | /?ad=qwe&dw
285     12 |  
286     14 | http://
287      6 | 4aew.werc.ewr
288     12 |  
289     14 | http://
290      6 | 5aew.werc.ewr:8100
291     12 | /?  
292      1 | ad
293     12 | =
294      1 | qwe
295     12 | &
296      1 | dw
297     12 |  
298      5 | 6aew.werc.ewr:8100/?ad=qwe&dw
299      6 | 6aew.werc.ewr:8100
300     18 | /?ad=qwe&dw
301     12 |  
302      5 | 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32
303      6 | 7aew.werc.ewr:8100
304     18 | /?ad=qwe&dw=%20%32
305     12 |  
306      7 | +4.0e-10
307     12 |  
308      1 | qwe
309     12 |  
310      1 | qwe
311     12 |  
312      1 | qwqwe
313     12 |  
314     20 | 234.435
315     12 |  
316     22 | 455
317     12 |  
318     20 | 5.005
319     12 |  
320      4 | teodor@stack.net
321     12 |  
322     16 | qwe-wer
323     11 | qwe
324     12 | -
325     11 | wer
326     12 |  
327      1 | asdf
328     12 |  
329     13 | <fr>
330      1 | qwer
331     12 |  
332      1 | jf
333     12 |  
334      1 | sdjk
335     12 | <
336      1 | we
337     12 |  
338      1 | hjwer
339     12 |  
340     13 | <werrwe>
341     12 |  
342      3 | ewr1
343     12 | > 
344      3 | ewri2
345     12 |  
346     13 | <a href="qwe<qwe>">
347     12 | 
348        : 
349     19 | /usr/local/fff
350     12 |  
351     19 | /awdf/dwqe/4325
352     12 |  
353     19 | rewt/ewr
354     12 |  
355      1 | wefjn
356     12 |  
357     19 | /wqe-324/ewr
358     12 |  
359     19 | gist.h
360     12 |  
361     19 | gist.h.c
362     12 |  
363     19 | gist.c
364     12 | . 
365      1 | readline
366     12 |  
367     20 | 4.2
368     12 |  
369     20 | 4.2
370     12 | . 
371     20 | 4.2
372     12 | , 
373      1 | readline
374     20 | -4.2
375     12 |  
376      1 | readline
377     20 | -4.2
378     12 | . 
379     22 | 234
380     12 | 
381        : 
382     12 | <
383      1 | i
384     12 |  
385     13 | <b>
386     12 |  
387      1 | wow
388     12 |   
389     12 | < 
390      1 | jqw
391     12 |  
392     12 | <> 
393      1 | qwerty
394 (131 rows)
396 SELECT to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/?  ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
397 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234
398 <i <b> wow  < jqw <> qwerty');
399                                                                                                                                                                                                                                                                                                                                                                                                                       to_tsvector                                                                                                                                                                                                                                                                                                                                                                                                                       
400 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
401  '+4.0e-10':26 '-4.2':58,60 '/?ad=qwe&dw':7,10,14,22 '/?ad=qwe&dw=%20%32':25 '/awdf/dwqe/4325':46 '/usr/local/fff':45 '/wqe-324/ewr':49 '1aew.werc.ewr':9 '1aew.werc.ewr/?ad=qwe&dw':8 '234':61 '234.435':30 '2aew.werc.ewr':11 '345':1 '3aew.werc.ewr':13 '3aew.werc.ewr/?ad=qwe&dw':12 '4.2':54,55,56 '455':31 '4aew.werc.ewr':15 '5.005':32 '5aew.werc.ewr:8100':16 '6aew.werc.ewr:8100':21 '6aew.werc.ewr:8100/?ad=qwe&dw':20 '7aew.werc.ewr:8100':24 '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32':23 'ad':17 'aew.werc.ewr':6 'aew.werc.ewr/?ad=qwe&dw':5 'asdf':37 'dw':19 'efd.r':3 'ewr1':43 'ewri2':44 'gist.c':52 'gist.h':50 'gist.h.c':51 'hjwer':42 'jf':39 'jqw':64 'qwe':2,18,27,28,35 'qwe-wer':34 'qwer':38 'qwerti':65 'qwqwe':29 'readlin':53,57,59 'rewt/ewr':47 'sdjk':40 'teodor@stack.net':33 'wefjn':48 'wer':36 'wow':63 'www.com':4
402 (1 row)
404 SELECT length(to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/?  ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
405 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234
406 <i <b> wow  < jqw <> qwerty'));
407  length 
408 --------
409      51
410 (1 row)
412 -- ts_debug
413 SELECT * from ts_debug('english', '<myns:foo-bar_baz.blurfl>abc&nm1;def&#xa9;ghi&#245;jkl</myns:foo-bar_baz.blurfl>');
414    alias   |   description   |           token            |  dictionaries  |  dictionary  | lexemes 
415 -----------+-----------------+----------------------------+----------------+--------------+---------
416  tag       | XML tag         | <myns:foo-bar_baz.blurfl>  | {}             |              | 
417  asciiword | Word, all ASCII | abc                        | {english_stem} | english_stem | {abc}
418  entity    | XML entity      | &nm1;                      | {}             |              | 
419  asciiword | Word, all ASCII | def                        | {english_stem} | english_stem | {def}
420  entity    | XML entity      | &#xa9;                     | {}             |              | 
421  asciiword | Word, all ASCII | ghi                        | {english_stem} | english_stem | {ghi}
422  entity    | XML entity      | &#245;                     | {}             |              | 
423  asciiword | Word, all ASCII | jkl                        | {english_stem} | english_stem | {jkl}
424  tag       | XML tag         | </myns:foo-bar_baz.blurfl> | {}             |              | 
425 (9 rows)
427 -- to_tsquery
428 SELECT to_tsquery('english', 'qwe & sKies ');
429   to_tsquery   
430 ---------------
431  'qwe' & 'sky'
432 (1 row)
434 SELECT to_tsquery('simple', 'qwe & sKies ');
435    to_tsquery    
436 -----------------
437  'qwe' & 'skies'
438 (1 row)
440 SELECT to_tsquery('english', '''the wether'':dc & ''           sKies '':BC ');
441        to_tsquery       
442 ------------------------
443  'wether':CD & 'sky':BC
444 (1 row)
446 SELECT to_tsquery('english', 'asd&(and|fghj)');
447    to_tsquery   
448 ----------------
449  'asd' & 'fghj'
450 (1 row)
452 SELECT to_tsquery('english', '(asd&and)|fghj');
453    to_tsquery   
454 ----------------
455  'asd' | 'fghj'
456 (1 row)
458 SELECT to_tsquery('english', '(asd&!and)|fghj');
459    to_tsquery   
460 ----------------
461  'asd' | 'fghj'
462 (1 row)
464 SELECT to_tsquery('english', '(the|and&(i&1))&fghj');
465   to_tsquery  
466 --------------
467  '1' & 'fghj'
468 (1 row)
470 SELECT plainto_tsquery('english', 'the and z 1))& fghj');
471   plainto_tsquery   
472 --------------------
473  'z' & '1' & 'fghj'
474 (1 row)
476 SELECT plainto_tsquery('english', 'foo bar') && plainto_tsquery('english', 'asd');
477        ?column?        
478 -----------------------
479  'foo' & 'bar' & 'asd'
480 (1 row)
482 SELECT plainto_tsquery('english', 'foo bar') || plainto_tsquery('english', 'asd fg');
483            ?column?           
484 ------------------------------
485  'foo' & 'bar' | 'asd' & 'fg'
486 (1 row)
488 SELECT plainto_tsquery('english', 'foo bar') || !!plainto_tsquery('english', 'asd fg');
489              ?column?              
490 -----------------------------------
491  'foo' & 'bar' | !( 'asd' & 'fg' )
492 (1 row)
494 SELECT plainto_tsquery('english', 'foo bar') && 'asd | fg';
495              ?column?             
496 ----------------------------------
497  'foo' & 'bar' & ( 'asd' | 'fg' )
498 (1 row)
500 SELECT ts_rank_cd(to_tsvector('english', '
501 Day after day, day after day,
502   We stuck, nor breath nor motion,
503 As idle as a painted Ship
504   Upon a painted Ocean.
505 Water, water, every where
506   And all the boards did shrink;
507 Water, water, every where,
508   Nor any drop to drink.
509 S. T. Coleridge (1772-1834)
510 '), to_tsquery('english', 'paint&water'));
511  ts_rank_cd 
512 ------------
513        0.05
514 (1 row)
516 SELECT ts_rank_cd(to_tsvector('english', '
517 Day after day, day after day,
518   We stuck, nor breath nor motion,
519 As idle as a painted Ship
520   Upon a painted Ocean.
521 Water, water, every where
522   And all the boards did shrink;
523 Water, water, every where,
524   Nor any drop to drink.
525 S. T. Coleridge (1772-1834)
526 '), to_tsquery('english', 'breath&motion&water'));
527  ts_rank_cd 
528 ------------
529  0.00833333
530 (1 row)
532 SELECT ts_rank_cd(to_tsvector('english', '
533 Day after day, day after day,
534   We stuck, nor breath nor motion,
535 As idle as a painted Ship
536   Upon a painted Ocean.
537 Water, water, every where
538   And all the boards did shrink;
539 Water, water, every where,
540   Nor any drop to drink.
541 S. T. Coleridge (1772-1834)
542 '), to_tsquery('english', 'ocean'));
543  ts_rank_cd 
544 ------------
545         0.1
546 (1 row)
548 --headline tests
549 SELECT ts_headline('english', '
550 Day after day, day after day,
551   We stuck, nor breath nor motion,
552 As idle as a painted Ship
553   Upon a painted Ocean.
554 Water, water, every where
555   And all the boards did shrink;
556 Water, water, every where,
557   Nor any drop to drink.
558 S. T. Coleridge (1772-1834)
559 ', to_tsquery('english', 'paint&water'));
560                ts_headline               
561 -----------------------------------------
562  <b>painted</b> Ocean.
563  <b>Water</b>, <b>water</b>, every where
564    And all the boards did shrink;
565  <b>Water</b>, <b>water</b>, every
566 (1 row)
568 SELECT ts_headline('english', '
569 Day after day, day after day,
570   We stuck, nor breath nor motion,
571 As idle as a painted Ship
572   Upon a painted Ocean.
573 Water, water, every where
574   And all the boards did shrink;
575 Water, water, every where,
576   Nor any drop to drink.
577 S. T. Coleridge (1772-1834)
578 ', to_tsquery('english', 'breath&motion&water'));
579            ts_headline            
580 ----------------------------------
581  <b>breath</b> nor <b>motion</b>,
582  As idle as a painted Ship
583    Upon a painted Ocean.
584  <b>Water</b>, <b>water</b>
585 (1 row)
587 SELECT ts_headline('english', '
588 Day after day, day after day,
589   We stuck, nor breath nor motion,
590 As idle as a painted Ship
591   Upon a painted Ocean.
592 Water, water, every where
593   And all the boards did shrink;
594 Water, water, every where,
595   Nor any drop to drink.
596 S. T. Coleridge (1772-1834)
597 ', to_tsquery('english', 'ocean'));
598            ts_headline            
599 ----------------------------------
600  <b>Ocean</b>.
601  Water, water, every where
602    And all the boards did shrink;
603  Water, water, every where
604 (1 row)
606 SELECT ts_headline('english', '
607 <html>
608 <!-- some comment -->
609 <body>
610 Sea view wow <u>foo bar</u> <i>qq</i>
611 <a href="http://www.google.com/foo.bar.html" target="_blank">YES &nbsp;</a>
612 ff-bg
613 <script>
614        document.write(15);
615 </script>
616 </body>
617 </html>',
618 to_tsquery('english', 'sea&foo'), 'HighlightAll=true');
619                                  ts_headline                                 
620 -----------------------------------------------------------------------------
622  <html>
623  <!-- some comment -->
624  <body>
625  <b>Sea</b> view wow <u><b>foo</b> bar</u> <i>qq</i>
626  <a href="http://www.google.com/foo.bar.html" target="_blank">YES &nbsp;</a>
627  ff-bg
628  <script>
629         document.write(15);
630  </script>
631  </body>
632  </html>
633 (1 row)
635 --Check if headline fragments work 
636 SELECT ts_headline('english', '
637 Day after day, day after day,
638   We stuck, nor breath nor motion,
639 As idle as a painted Ship
640   Upon a painted Ocean.
641 Water, water, every where
642   And all the boards did shrink;
643 Water, water, every where,
644   Nor any drop to drink.
645 S. T. Coleridge (1772-1834)
646 ', to_tsquery('english', 'ocean'), 'MaxFragments=1');
647             ts_headline             
648 ------------------------------------
649  after day,
650    We stuck, nor breath nor motion,
651  As idle as a painted Ship
652    Upon a painted <b>Ocean</b>.
653  Water, water, every where
654    And all the boards did shrink;
655  Water, water, every where,
656    Nor any drop
657 (1 row)
659 --Check if more than one fragments are displayed
660 SELECT ts_headline('english', '
661 Day after day, day after day,
662   We stuck, nor breath nor motion,
663 As idle as a painted Ship
664   Upon a painted Ocean.
665 Water, water, every where
666   And all the boards did shrink;
667 Water, water, every where,
668   Nor any drop to drink.
669 S. T. Coleridge (1772-1834)
670 ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2');
671                  ts_headline                  
672 ----------------------------------------------
673  after day, day after day,
674    We <b>stuck</b>, nor breath nor motion,
675  As idle as a painted Ship
676    Upon a painted Ocean.
677  Water, water, every where
678    And all the boards did shrink;
679  Water, water, every where ... drop to drink.
680  S. T. <b>Coleridge</b>
681 (1 row)
683 --Fragments when there all query words are not in the document
684 SELECT ts_headline('english', '
685 Day after day, day after day,
686   We stuck, nor breath nor motion,
687 As idle as a painted Ship
688   Upon a painted Ocean.
689 Water, water, every where
690   And all the boards did shrink;
691 Water, water, every where,
692   Nor any drop to drink.
693 S. T. Coleridge (1772-1834)
694 ', to_tsquery('english', 'ocean & seahorse'), 'MaxFragments=1');
695             ts_headline             
696 ------------------------------------
698  Day after day, day after day,
699    We stuck, nor breath nor motion,
700  As idle as
701 (1 row)
703 --FragmentDelimiter option
704 SELECT ts_headline('english', '
705 Day after day, day after day,
706   We stuck, nor breath nor motion,
707 As idle as a painted Ship
708   Upon a painted Ocean.
709 Water, water, every where
710   And all the boards did shrink;
711 Water, water, every where,
712   Nor any drop to drink.
713 S. T. Coleridge (1772-1834)
714 ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2,FragmentDelimiter=***');
715                 ts_headline                 
716 --------------------------------------------
717  after day, day after day,
718    We <b>stuck</b>, nor breath nor motion,
719  As idle as a painted Ship
720    Upon a painted Ocean.
721  Water, water, every where
722    And all the boards did shrink;
723  Water, water, every where***drop to drink.
724  S. T. <b>Coleridge</b>
725 (1 row)
727 --Rewrite sub system
728 CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT);
729 \set ECHO none
730 ALTER TABLE test_tsquery ADD COLUMN keyword tsquery;
731 UPDATE test_tsquery SET keyword = to_tsquery('english', txtkeyword);
732 ALTER TABLE test_tsquery ADD COLUMN sample tsquery;
733 UPDATE test_tsquery SET sample = to_tsquery('english', txtsample::text);
734 SELECT COUNT(*) FROM test_tsquery WHERE keyword <  'new & york';
735  count 
736 -------
737      1
738 (1 row)
740 SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
741  count 
742 -------
743      2
744 (1 row)
746 SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
747  count 
748 -------
749      1
750 (1 row)
752 SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
753  count 
754 -------
755      3
756 (1 row)
758 SELECT COUNT(*) FROM test_tsquery WHERE keyword >  'new & york';
759  count 
760 -------
761      2
762 (1 row)
764 CREATE UNIQUE INDEX bt_tsq ON test_tsquery (keyword);
765 SET enable_seqscan=OFF;
766 SELECT COUNT(*) FROM test_tsquery WHERE keyword <  'new & york';
767  count 
768 -------
769      1
770 (1 row)
772 SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
773  count 
774 -------
775      2
776 (1 row)
778 SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
779  count 
780 -------
781      1
782 (1 row)
784 SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
785  count 
786 -------
787      3
788 (1 row)
790 SELECT COUNT(*) FROM test_tsquery WHERE keyword >  'new & york';
791  count 
792 -------
793      2
794 (1 row)
796 RESET enable_seqscan;
797 SELECT ts_rewrite('foo & bar & qq & new & york',  'new & york'::tsquery, 'big & apple | nyc | new & york & city');
798                                     ts_rewrite                                    
799 ----------------------------------------------------------------------------------
800  'foo' & 'bar' & 'qq' & ( 'city' & 'new' & 'york' | ( 'nyc' | 'big' & 'apple' ) )
801 (1 row)
803 SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
804      ts_rewrite      
805 ---------------------
806  'moskva' | 'moscow'
807 (1 row)
809 SELECT ts_rewrite('moscow & hotel', 'SELECT keyword, sample FROM test_tsquery'::text );
810             ts_rewrite             
811 -----------------------------------
812  'hotel' & ( 'moskva' | 'moscow' )
813 (1 row)
815 SELECT ts_rewrite('bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery'::text );
816                                      ts_rewrite                                      
817 -------------------------------------------------------------------------------------
818  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
819 (1 row)
821 SELECT ts_rewrite( 'moscow', 'SELECT keyword, sample FROM test_tsquery');
822      ts_rewrite      
823 ---------------------
824  'moskva' | 'moscow'
825 (1 row)
827 SELECT ts_rewrite( 'moscow & hotel', 'SELECT keyword, sample FROM test_tsquery');
828             ts_rewrite             
829 -----------------------------------
830  'hotel' & ( 'moskva' | 'moscow' )
831 (1 row)
833 SELECT ts_rewrite( 'bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery');
834                                      ts_rewrite                                      
835 -------------------------------------------------------------------------------------
836  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
837 (1 row)
839 SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
840     keyword     
841 ----------------
842  'new' & 'york'
843 (1 row)
845 SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
846  keyword  
847 ----------
848  'moscow'
849 (1 row)
851 SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
852  keyword 
853 ---------
854 (0 rows)
856 SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
857  keyword  
858 ----------
859  'moscow'
860 (1 row)
862 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
863      ts_rewrite      
864 ---------------------
865  'moskva' | 'moscow'
866 (1 row)
868 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
869             ts_rewrite             
870 -----------------------------------
871  'hotel' & ( 'moskva' | 'moscow' )
872 (1 row)
874 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar &  new & qq & foo & york') AS query;
875                                      ts_rewrite                                      
876 -------------------------------------------------------------------------------------
877  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
878 (1 row)
880 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
881      ts_rewrite      
882 ---------------------
883  'moskva' | 'moscow'
884 (1 row)
886 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
887             ts_rewrite             
888 -----------------------------------
889  'hotel' & ( 'moskva' | 'moscow' )
890 (1 row)
892 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
893                                      ts_rewrite                                      
894 -------------------------------------------------------------------------------------
895  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
896 (1 row)
898 CREATE INDEX qq ON test_tsquery USING gist (keyword tsquery_ops);
899 SET enable_seqscan=OFF;
900 SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
901     keyword     
902 ----------------
903  'new' & 'york'
904 (1 row)
906 SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
907  keyword  
908 ----------
909  'moscow'
910 (1 row)
912 SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
913  keyword 
914 ---------
915 (0 rows)
917 SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
918  keyword  
919 ----------
920  'moscow'
921 (1 row)
923 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
924      ts_rewrite      
925 ---------------------
926  'moskva' | 'moscow'
927 (1 row)
929 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
930             ts_rewrite             
931 -----------------------------------
932  'hotel' & ( 'moskva' | 'moscow' )
933 (1 row)
935 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
936                                      ts_rewrite                                      
937 -------------------------------------------------------------------------------------
938  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
939 (1 row)
941 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
942      ts_rewrite      
943 ---------------------
944  'moskva' | 'moscow'
945 (1 row)
947 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
948             ts_rewrite             
949 -----------------------------------
950  'hotel' & ( 'moskva' | 'moscow' )
951 (1 row)
953 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar &  new & qq & foo & york') AS query;
954                                      ts_rewrite                                      
955 -------------------------------------------------------------------------------------
956  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | ( 'big' & 'appl' | 'new' & 'york' ) )
957 (1 row)
959 RESET enable_seqscan;
960 --test GUC
961 SET default_text_search_config=simple;
962 SELECT to_tsvector('SKIES My booKs');
963         to_tsvector         
964 ----------------------------
965  'books':3 'my':2 'skies':1
966 (1 row)
968 SELECT plainto_tsquery('SKIES My booKs');
969      plainto_tsquery      
970 --------------------------
971  'skies' & 'my' & 'books'
972 (1 row)
974 SELECT to_tsquery('SKIES & My | booKs');
975         to_tsquery        
976 --------------------------
977  'skies' & 'my' | 'books'
978 (1 row)
980 SET default_text_search_config=english;
981 SELECT to_tsvector('SKIES My booKs');
982    to_tsvector    
983 ------------------
984  'book':3 'sky':1
985 (1 row)
987 SELECT plainto_tsquery('SKIES My booKs');
988  plainto_tsquery 
989 -----------------
990  'sky' & 'book'
991 (1 row)
993 SELECT to_tsquery('SKIES & My | booKs');
994    to_tsquery   
995 ----------------
996  'sky' | 'book'
997 (1 row)
999 --trigger
1000 CREATE TRIGGER tsvectorupdate
1001 BEFORE UPDATE OR INSERT ON test_tsvector
1002 FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(a, 'pg_catalog.english', t);
1003 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1004  count 
1005 -------
1006      0
1007 (1 row)
1009 INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
1010 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1011  count 
1012 -------
1013      1
1014 (1 row)
1016 UPDATE test_tsvector SET t = null WHERE t = '345 qwerty';
1017 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1018  count 
1019 -------
1020      0
1021 (1 row)
1023 INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
1024 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1025  count 
1026 -------
1027      1
1028 (1 row)
1030 -- test finding items in GIN's pending list
1031 create temp table pendtest (ts tsvector);
1032 create index pendtest_idx on pendtest using gin(ts);
1033 insert into pendtest values (to_tsvector('Lore ipsam'));
1034 insert into pendtest values (to_tsvector('Lore ipsum'));
1035 select * from pendtest where 'ipsu:*'::tsquery @@ ts;
1036          ts         
1037 --------------------
1038  'ipsum':2 'lore':1
1039 (1 row)
1041 select * from pendtest where 'ipsa:*'::tsquery @@ ts;
1042          ts         
1043 --------------------
1044  'ipsam':2 'lore':1
1045 (1 row)
1047 select * from pendtest where 'ips:*'::tsquery @@ ts;
1048          ts         
1049 --------------------
1050  'ipsam':2 'lore':1
1051  'ipsum':2 'lore':1
1052 (2 rows)
1054 select * from pendtest where 'ipt:*'::tsquery @@ ts;
1055  ts 
1056 ----
1057 (0 rows)
1059 select * from pendtest where 'ipi:*'::tsquery @@ ts;
1060  ts 
1061 ----
1062 (0 rows)