]> granicus.if.org Git - postgresql/blob - src/test/regress/expected/tsearch.out
Don't allow logging in with empty password.
[postgresql] / src / test / regress / expected / tsearch.out
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)
17
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)
24
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)
31
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)
38
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)
45
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)
57
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)
64
65 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
66  count 
67 -------
68     17
69 (1 row)
70
71 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
72  count 
73 -------
74      6
75 (1 row)
76
77 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
78  count 
79 -------
80     98
81 (1 row)
82
83 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
84  count 
85 -------
86     23
87 (1 row)
88
89 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
90  count 
91 -------
92     39
93 (1 row)
94
95 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
96  count 
97 -------
98    494
99 (1 row)
100
101 SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
102  count 
103 -------
104    158
105 (1 row)
106
107 SELECT count(*) FROM test_tsvector WHERE a @@ 'no_such_lexeme';
108  count 
109 -------
110      0
111 (1 row)
112
113 SELECT count(*) FROM test_tsvector WHERE a @@ '!no_such_lexeme';
114  count 
115 -------
116    508
117 (1 row)
118
119 create index wowidx on test_tsvector using gist (a);
120 SET enable_seqscan=OFF;
121 SET enable_indexscan=ON;
122 SET enable_bitmapscan=OFF;
123 explain (costs off) SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
124                       QUERY PLAN                       
125 -------------------------------------------------------
126  Aggregate
127    ->  Index Scan using wowidx on test_tsvector
128          Index Cond: (a @@ '''wr'' | ''qh'''::tsquery)
129 (3 rows)
130
131 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
132  count 
133 -------
134    158
135 (1 row)
136
137 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
138  count 
139 -------
140     17
141 (1 row)
142
143 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
144  count 
145 -------
146      6
147 (1 row)
148
149 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
150  count 
151 -------
152     98
153 (1 row)
154
155 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
156  count 
157 -------
158     23
159 (1 row)
160
161 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
162  count 
163 -------
164     39
165 (1 row)
166
167 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
168  count 
169 -------
170    494
171 (1 row)
172
173 SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
174  count 
175 -------
176    158
177 (1 row)
178
179 SELECT count(*) FROM test_tsvector WHERE a @@ 'no_such_lexeme';
180  count 
181 -------
182      0
183 (1 row)
184
185 SELECT count(*) FROM test_tsvector WHERE a @@ '!no_such_lexeme';
186  count 
187 -------
188    508
189 (1 row)
190
191 SET enable_indexscan=OFF;
192 SET enable_bitmapscan=ON;
193 explain (costs off) SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
194                          QUERY PLAN                          
195 -------------------------------------------------------------
196  Aggregate
197    ->  Bitmap Heap Scan on test_tsvector
198          Recheck Cond: (a @@ '''wr'' | ''qh'''::tsquery)
199          ->  Bitmap Index Scan on wowidx
200                Index Cond: (a @@ '''wr'' | ''qh'''::tsquery)
201 (5 rows)
202
203 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
204  count 
205 -------
206    158
207 (1 row)
208
209 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
210  count 
211 -------
212     17
213 (1 row)
214
215 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
216  count 
217 -------
218      6
219 (1 row)
220
221 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
222  count 
223 -------
224     98
225 (1 row)
226
227 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
228  count 
229 -------
230     23
231 (1 row)
232
233 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
234  count 
235 -------
236     39
237 (1 row)
238
239 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
240  count 
241 -------
242    494
243 (1 row)
244
245 SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
246  count 
247 -------
248    158
249 (1 row)
250
251 SELECT count(*) FROM test_tsvector WHERE a @@ 'no_such_lexeme';
252  count 
253 -------
254      0
255 (1 row)
256
257 SELECT count(*) FROM test_tsvector WHERE a @@ '!no_such_lexeme';
258  count 
259 -------
260    508
261 (1 row)
262
263 RESET enable_seqscan;
264 RESET enable_indexscan;
265 RESET enable_bitmapscan;
266 DROP INDEX wowidx;
267 CREATE INDEX wowidx ON test_tsvector USING gin (a);
268 SET enable_seqscan=OFF;
269 -- GIN only supports bitmapscan, so no need to test plain indexscan
270 explain (costs off) SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
271                          QUERY PLAN                          
272 -------------------------------------------------------------
273  Aggregate
274    ->  Bitmap Heap Scan on test_tsvector
275          Recheck Cond: (a @@ '''wr'' | ''qh'''::tsquery)
276          ->  Bitmap Index Scan on wowidx
277                Index Cond: (a @@ '''wr'' | ''qh'''::tsquery)
278 (5 rows)
279
280 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
281  count 
282 -------
283    158
284 (1 row)
285
286 SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
287  count 
288 -------
289     17
290 (1 row)
291
292 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
293  count 
294 -------
295      6
296 (1 row)
297
298 SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
299  count 
300 -------
301     98
302 (1 row)
303
304 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
305  count 
306 -------
307     23
308 (1 row)
309
310 SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
311  count 
312 -------
313     39
314 (1 row)
315
316 SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
317  count 
318 -------
319    494
320 (1 row)
321
322 SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
323  count 
324 -------
325    158
326 (1 row)
327
328 SELECT count(*) FROM test_tsvector WHERE a @@ 'no_such_lexeme';
329  count 
330 -------
331      0
332 (1 row)
333
334 SELECT count(*) FROM test_tsvector WHERE a @@ '!no_such_lexeme';
335  count 
336 -------
337    508
338 (1 row)
339
340 RESET enable_seqscan;
341 INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
342 SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;
343  word | ndoc | nentry 
344 ------+------+--------
345  qq   |  108 |    108
346  qt   |  102 |    102
347  qe   |  100 |    100
348  qh   |   98 |     98
349  qw   |   98 |     98
350  qa   |   97 |     97
351  ql   |   94 |     94
352  qs   |   94 |     94
353  qi   |   92 |     92
354  qr   |   92 |     92
355 (10 rows)
356
357 SELECT * FROM ts_stat('SELECT a FROM test_tsvector', 'AB') ORDER BY ndoc DESC, nentry DESC, word;
358  word | ndoc | nentry 
359 ------+------+--------
360  DFG  |    1 |      2
361 (1 row)
362
363 --dictionaries and to_tsvector
364 SELECT ts_lexize('english_stem', 'skies');
365  ts_lexize 
366 -----------
367  {sky}
368 (1 row)
369
370 SELECT ts_lexize('english_stem', 'identity');
371  ts_lexize 
372 -----------
373  {ident}
374 (1 row)
375
376 SELECT * FROM ts_token_type('default');
377  tokid |      alias      |               description                
378 -------+-----------------+------------------------------------------
379      1 | asciiword       | Word, all ASCII
380      2 | word            | Word, all letters
381      3 | numword         | Word, letters and digits
382      4 | email           | Email address
383      5 | url             | URL
384      6 | host            | Host
385      7 | sfloat          | Scientific notation
386      8 | version         | Version number
387      9 | hword_numpart   | Hyphenated word part, letters and digits
388     10 | hword_part      | Hyphenated word part, all letters
389     11 | hword_asciipart | Hyphenated word part, all ASCII
390     12 | blank           | Space symbols
391     13 | tag             | XML tag
392     14 | protocol        | Protocol head
393     15 | numhword        | Hyphenated word, letters and digits
394     16 | asciihword      | Hyphenated word, all ASCII
395     17 | hword           | Hyphenated word, all letters
396     18 | url_path        | URL path
397     19 | file            | File or path name
398     20 | float           | Decimal notation
399     21 | int             | Signed integer
400     22 | uint            | Unsigned integer
401     23 | entity          | XML entity
402 (23 rows)
403
404 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 teodor@123-stack.net 123_teodor@stack.net 123-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  tokid |                token                 
408 -------+--------------------------------------
409     22 | 345
410     12 |  
411      1 | qwe
412     12 | @
413     19 | efd.r
414     12 |  ' 
415     14 | http://
416      6 | www.com
417     12 | / 
418     14 | http://
419      5 | aew.werc.ewr/?ad=qwe&dw
420      6 | aew.werc.ewr
421     18 | /?ad=qwe&dw
422     12 |  
423      5 | 1aew.werc.ewr/?ad=qwe&dw
424      6 | 1aew.werc.ewr
425     18 | /?ad=qwe&dw
426     12 |  
427      6 | 2aew.werc.ewr
428     12 |  
429     14 | http://
430      5 | 3aew.werc.ewr/?ad=qwe&dw
431      6 | 3aew.werc.ewr
432     18 | /?ad=qwe&dw
433     12 |  
434     14 | http://
435      6 | 4aew.werc.ewr
436     12 |  
437     14 | http://
438      5 | 5aew.werc.ewr:8100/?
439      6 | 5aew.werc.ewr:8100
440     18 | /?
441     12 |   
442      1 | ad
443     12 | =
444      1 | qwe
445     12 | &
446      1 | dw
447     12 |  
448      5 | 6aew.werc.ewr:8100/?ad=qwe&dw
449      6 | 6aew.werc.ewr:8100
450     18 | /?ad=qwe&dw
451     12 |  
452      5 | 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32
453      6 | 7aew.werc.ewr:8100
454     18 | /?ad=qwe&dw=%20%32
455     12 |  
456      7 | +4.0e-10
457     12 |  
458      1 | qwe
459     12 |  
460      1 | qwe
461     12 |  
462      1 | qwqwe
463     12 |  
464     20 | 234.435
465     12 |  
466     22 | 455
467     12 |  
468     20 | 5.005
469     12 |  
470      4 | teodor@stack.net
471     12 |  
472      4 | teodor@123-stack.net
473     12 |  
474      4 | 123_teodor@stack.net
475     12 |  
476      4 | 123-teodor@stack.net
477     12 |  
478     16 | qwe-wer
479     11 | qwe
480     12 | -
481     11 | wer
482     12 |  
483      1 | asdf
484     12 |  
485     13 | <fr>
486      1 | qwer
487     12 |  
488      1 | jf
489     12 |  
490      1 | sdjk
491     12 | <
492      1 | we
493     12 |  
494      1 | hjwer
495     12 |  
496     13 | <werrwe>
497     12 |  
498      3 | ewr1
499     12 | > 
500      3 | ewri2
501     12 |  
502     13 | <a href="qwe<qwe>">
503     12 |                                     +
504        | 
505     19 | /usr/local/fff
506     12 |  
507     19 | /awdf/dwqe/4325
508     12 |  
509     19 | rewt/ewr
510     12 |  
511      1 | wefjn
512     12 |  
513     19 | /wqe-324/ewr
514     12 |  
515     19 | gist.h
516     12 |  
517     19 | gist.h.c
518     12 |  
519     19 | gist.c
520     12 | . 
521      1 | readline
522     12 |  
523     20 | 4.2
524     12 |  
525     20 | 4.2
526     12 | . 
527     20 | 4.2
528     12 | , 
529      1 | readline
530     20 | -4.2
531     12 |  
532      1 | readline
533     20 | -4.2
534     12 | . 
535     22 | 234
536     12 |                                     +
537        | 
538     12 | <
539      1 | i
540     12 |  
541     13 | <b>
542     12 |  
543      1 | wow
544     12 |   
545     12 | < 
546      1 | jqw
547     12 |  
548     12 | <> 
549      1 | qwerty
550 (139 rows)
551
552 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 teodor@123-stack.net 123_teodor@stack.net 123-teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
553 /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
554 <i <b> wow  < jqw <> qwerty');
555                                                                                                                                                                                                                                                                                                                                                                                                                                                                               to_tsvector                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
556 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
557  '+4.0e-10':28 '-4.2':63,65 '/?':18 '/?ad=qwe&dw':7,10,14,24 '/?ad=qwe&dw=%20%32':27 '/awdf/dwqe/4325':51 '/usr/local/fff':50 '/wqe-324/ewr':54 '123-teodor@stack.net':38 '123_teodor@stack.net':37 '1aew.werc.ewr':9 '1aew.werc.ewr/?ad=qwe&dw':8 '234':66 '234.435':32 '2aew.werc.ewr':11 '345':1 '3aew.werc.ewr':13 '3aew.werc.ewr/?ad=qwe&dw':12 '4.2':59,60,61 '455':33 '4aew.werc.ewr':15 '5.005':34 '5aew.werc.ewr:8100':17 '5aew.werc.ewr:8100/?':16 '6aew.werc.ewr:8100':23 '6aew.werc.ewr:8100/?ad=qwe&dw':22 '7aew.werc.ewr:8100':26 '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32':25 'ad':19 'aew.werc.ewr':6 'aew.werc.ewr/?ad=qwe&dw':5 'asdf':42 'dw':21 'efd.r':3 'ewr1':48 'ewri2':49 'gist.c':57 'gist.h':55 'gist.h.c':56 'hjwer':47 'jf':44 'jqw':69 'qwe':2,20,29,30,40 'qwe-wer':39 'qwer':43 'qwerti':70 'qwqwe':31 'readlin':58,62,64 'rewt/ewr':52 'sdjk':45 'teodor@123-stack.net':36 'teodor@stack.net':35 'wefjn':53 'wer':41 'wow':68 'www.com':4
558 (1 row)
559
560 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 teodor@123-stack.net 123_teodor@stack.net 123-teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
561 /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
562 <i <b> wow  < jqw <> qwerty'));
563  length 
564 --------
565      56
566 (1 row)
567
568 -- ts_debug
569 SELECT * from ts_debug('english', '<myns:foo-bar_baz.blurfl>abc&nm1;def&#xa9;ghi&#245;jkl</myns:foo-bar_baz.blurfl>');
570    alias   |   description   |           token            |  dictionaries  |  dictionary  | lexemes 
571 -----------+-----------------+----------------------------+----------------+--------------+---------
572  tag       | XML tag         | <myns:foo-bar_baz.blurfl>  | {}             |              | 
573  asciiword | Word, all ASCII | abc                        | {english_stem} | english_stem | {abc}
574  entity    | XML entity      | &nm1;                      | {}             |              | 
575  asciiword | Word, all ASCII | def                        | {english_stem} | english_stem | {def}
576  entity    | XML entity      | &#xa9;                     | {}             |              | 
577  asciiword | Word, all ASCII | ghi                        | {english_stem} | english_stem | {ghi}
578  entity    | XML entity      | &#245;                     | {}             |              | 
579  asciiword | Word, all ASCII | jkl                        | {english_stem} | english_stem | {jkl}
580  tag       | XML tag         | </myns:foo-bar_baz.blurfl> | {}             |              | 
581 (9 rows)
582
583 -- check parsing of URLs
584 SELECT * from ts_debug('english', 'http://www.harewoodsolutions.co.uk/press.aspx</span>');
585   alias   |  description  |                 token                  | dictionaries | dictionary |                 lexemes                  
586 ----------+---------------+----------------------------------------+--------------+------------+------------------------------------------
587  protocol | Protocol head | http://                                | {}           |            | 
588  url      | URL           | www.harewoodsolutions.co.uk/press.aspx | {simple}     | simple     | {www.harewoodsolutions.co.uk/press.aspx}
589  host     | Host          | www.harewoodsolutions.co.uk            | {simple}     | simple     | {www.harewoodsolutions.co.uk}
590  url_path | URL path      | /press.aspx                            | {simple}     | simple     | {/press.aspx}
591  tag      | XML tag       | </span>                                | {}           |            | 
592 (5 rows)
593
594 SELECT * from ts_debug('english', 'http://aew.wer0c.ewr/id?ad=qwe&dw<span>');
595   alias   |  description  |           token            | dictionaries | dictionary |           lexemes            
596 ----------+---------------+----------------------------+--------------+------------+------------------------------
597  protocol | Protocol head | http://                    | {}           |            | 
598  url      | URL           | aew.wer0c.ewr/id?ad=qwe&dw | {simple}     | simple     | {aew.wer0c.ewr/id?ad=qwe&dw}
599  host     | Host          | aew.wer0c.ewr              | {simple}     | simple     | {aew.wer0c.ewr}
600  url_path | URL path      | /id?ad=qwe&dw              | {simple}     | simple     | {/id?ad=qwe&dw}
601  tag      | XML tag       | <span>                     | {}           |            | 
602 (5 rows)
603
604 SELECT * from ts_debug('english', 'http://5aew.werc.ewr:8100/?');
605   alias   |  description  |        token         | dictionaries | dictionary |        lexemes         
606 ----------+---------------+----------------------+--------------+------------+------------------------
607  protocol | Protocol head | http://              | {}           |            | 
608  url      | URL           | 5aew.werc.ewr:8100/? | {simple}     | simple     | {5aew.werc.ewr:8100/?}
609  host     | Host          | 5aew.werc.ewr:8100   | {simple}     | simple     | {5aew.werc.ewr:8100}
610  url_path | URL path      | /?                   | {simple}     | simple     | {/?}
611 (4 rows)
612
613 SELECT * from ts_debug('english', '5aew.werc.ewr:8100/?xx');
614   alias   | description |         token          | dictionaries | dictionary |         lexemes          
615 ----------+-------------+------------------------+--------------+------------+--------------------------
616  url      | URL         | 5aew.werc.ewr:8100/?xx | {simple}     | simple     | {5aew.werc.ewr:8100/?xx}
617  host     | Host        | 5aew.werc.ewr:8100     | {simple}     | simple     | {5aew.werc.ewr:8100}
618  url_path | URL path    | /?xx                   | {simple}     | simple     | {/?xx}
619 (3 rows)
620
621 -- to_tsquery
622 SELECT to_tsquery('english', 'qwe & sKies ');
623   to_tsquery   
624 ---------------
625  'qwe' & 'sky'
626 (1 row)
627
628 SELECT to_tsquery('simple', 'qwe & sKies ');
629    to_tsquery    
630 -----------------
631  'qwe' & 'skies'
632 (1 row)
633
634 SELECT to_tsquery('english', '''the wether'':dc & ''           sKies '':BC ');
635        to_tsquery       
636 ------------------------
637  'wether':CD & 'sky':BC
638 (1 row)
639
640 SELECT to_tsquery('english', 'asd&(and|fghj)');
641    to_tsquery   
642 ----------------
643  'asd' & 'fghj'
644 (1 row)
645
646 SELECT to_tsquery('english', '(asd&and)|fghj');
647    to_tsquery   
648 ----------------
649  'asd' | 'fghj'
650 (1 row)
651
652 SELECT to_tsquery('english', '(asd&!and)|fghj');
653    to_tsquery   
654 ----------------
655  'asd' | 'fghj'
656 (1 row)
657
658 SELECT to_tsquery('english', '(the|and&(i&1))&fghj');
659   to_tsquery  
660 --------------
661  '1' & 'fghj'
662 (1 row)
663
664 SELECT plainto_tsquery('english', 'the and z 1))& fghj');
665   plainto_tsquery   
666 --------------------
667  'z' & '1' & 'fghj'
668 (1 row)
669
670 SELECT plainto_tsquery('english', 'foo bar') && plainto_tsquery('english', 'asd');
671        ?column?        
672 -----------------------
673  'foo' & 'bar' & 'asd'
674 (1 row)
675
676 SELECT plainto_tsquery('english', 'foo bar') || plainto_tsquery('english', 'asd fg');
677            ?column?           
678 ------------------------------
679  'foo' & 'bar' | 'asd' & 'fg'
680 (1 row)
681
682 SELECT plainto_tsquery('english', 'foo bar') || !!plainto_tsquery('english', 'asd fg');
683              ?column?              
684 -----------------------------------
685  'foo' & 'bar' | !( 'asd' & 'fg' )
686 (1 row)
687
688 SELECT plainto_tsquery('english', 'foo bar') && 'asd | fg';
689              ?column?             
690 ----------------------------------
691  'foo' & 'bar' & ( 'asd' | 'fg' )
692 (1 row)
693
694 -- Check stop word deletion, a and s are stop-words
695 SELECT to_tsquery('english', '!(a & !b) & c');
696  to_tsquery  
697 -------------
698  !!'b' & 'c'
699 (1 row)
700
701 SELECT to_tsquery('english', '!(a & !b)');
702  to_tsquery 
703 ------------
704  !!'b'
705 (1 row)
706
707 SELECT to_tsquery('english', '(1 <-> 2) <-> a');
708  to_tsquery  
709 -------------
710  '1' <-> '2'
711 (1 row)
712
713 SELECT to_tsquery('english', '(1 <-> a) <-> 2');
714  to_tsquery  
715 -------------
716  '1' <2> '2'
717 (1 row)
718
719 SELECT to_tsquery('english', '(a <-> 1) <-> 2');
720  to_tsquery  
721 -------------
722  '1' <-> '2'
723 (1 row)
724
725 SELECT to_tsquery('english', 'a <-> (1 <-> 2)');
726  to_tsquery  
727 -------------
728  '1' <-> '2'
729 (1 row)
730
731 SELECT to_tsquery('english', '1 <-> (a <-> 2)');
732  to_tsquery  
733 -------------
734  '1' <2> '2'
735 (1 row)
736
737 SELECT to_tsquery('english', '1 <-> (2 <-> a)');
738  to_tsquery  
739 -------------
740  '1' <-> '2'
741 (1 row)
742
743 SELECT to_tsquery('english', '(1 <-> 2) <3> a');
744  to_tsquery  
745 -------------
746  '1' <-> '2'
747 (1 row)
748
749 SELECT to_tsquery('english', '(1 <-> a) <3> 2');
750  to_tsquery  
751 -------------
752  '1' <4> '2'
753 (1 row)
754
755 SELECT to_tsquery('english', '(a <-> 1) <3> 2');
756  to_tsquery  
757 -------------
758  '1' <3> '2'
759 (1 row)
760
761 SELECT to_tsquery('english', 'a <3> (1 <-> 2)');
762  to_tsquery  
763 -------------
764  '1' <-> '2'
765 (1 row)
766
767 SELECT to_tsquery('english', '1 <3> (a <-> 2)');
768  to_tsquery  
769 -------------
770  '1' <4> '2'
771 (1 row)
772
773 SELECT to_tsquery('english', '1 <3> (2 <-> a)');
774  to_tsquery  
775 -------------
776  '1' <3> '2'
777 (1 row)
778
779 SELECT to_tsquery('english', '(1 <3> 2) <-> a');
780  to_tsquery  
781 -------------
782  '1' <3> '2'
783 (1 row)
784
785 SELECT to_tsquery('english', '(1 <3> a) <-> 2');
786  to_tsquery  
787 -------------
788  '1' <4> '2'
789 (1 row)
790
791 SELECT to_tsquery('english', '(a <3> 1) <-> 2');
792  to_tsquery  
793 -------------
794  '1' <-> '2'
795 (1 row)
796
797 SELECT to_tsquery('english', 'a <-> (1 <3> 2)');
798  to_tsquery  
799 -------------
800  '1' <3> '2'
801 (1 row)
802
803 SELECT to_tsquery('english', '1 <-> (a <3> 2)');
804  to_tsquery  
805 -------------
806  '1' <4> '2'
807 (1 row)
808
809 SELECT to_tsquery('english', '1 <-> (2 <3> a)');
810  to_tsquery  
811 -------------
812  '1' <-> '2'
813 (1 row)
814
815 SELECT to_tsquery('english', '((a <-> 1) <-> 2) <-> s');
816  to_tsquery  
817 -------------
818  '1' <-> '2'
819 (1 row)
820
821 SELECT to_tsquery('english', '(2 <-> (a <-> 1)) <-> s');
822  to_tsquery  
823 -------------
824  '2' <2> '1'
825 (1 row)
826
827 SELECT to_tsquery('english', '((1 <-> a) <-> 2) <-> s');
828  to_tsquery  
829 -------------
830  '1' <2> '2'
831 (1 row)
832
833 SELECT to_tsquery('english', '(2 <-> (1 <-> a)) <-> s');
834  to_tsquery  
835 -------------
836  '2' <-> '1'
837 (1 row)
838
839 SELECT to_tsquery('english', 's <-> ((a <-> 1) <-> 2)');
840  to_tsquery  
841 -------------
842  '1' <-> '2'
843 (1 row)
844
845 SELECT to_tsquery('english', 's <-> (2 <-> (a <-> 1))');
846  to_tsquery  
847 -------------
848  '2' <2> '1'
849 (1 row)
850
851 SELECT to_tsquery('english', 's <-> ((1 <-> a) <-> 2)');
852  to_tsquery  
853 -------------
854  '1' <2> '2'
855 (1 row)
856
857 SELECT to_tsquery('english', 's <-> (2 <-> (1 <-> a))');
858  to_tsquery  
859 -------------
860  '2' <-> '1'
861 (1 row)
862
863 SELECT to_tsquery('english', '((a <-> 1) <-> s) <-> 2');
864  to_tsquery  
865 -------------
866  '1' <2> '2'
867 (1 row)
868
869 SELECT to_tsquery('english', '(s <-> (a <-> 1)) <-> 2');
870  to_tsquery  
871 -------------
872  '1' <-> '2'
873 (1 row)
874
875 SELECT to_tsquery('english', '((1 <-> a) <-> s) <-> 2');
876  to_tsquery  
877 -------------
878  '1' <3> '2'
879 (1 row)
880
881 SELECT to_tsquery('english', '(s <-> (1 <-> a)) <-> 2');
882  to_tsquery  
883 -------------
884  '1' <2> '2'
885 (1 row)
886
887 SELECT to_tsquery('english', '2 <-> ((a <-> 1) <-> s)');
888  to_tsquery  
889 -------------
890  '2' <2> '1'
891 (1 row)
892
893 SELECT to_tsquery('english', '2 <-> (s <-> (a <-> 1))');
894  to_tsquery  
895 -------------
896  '2' <3> '1'
897 (1 row)
898
899 SELECT to_tsquery('english', '2 <-> ((1 <-> a) <-> s)');
900  to_tsquery  
901 -------------
902  '2' <-> '1'
903 (1 row)
904
905 SELECT to_tsquery('english', '2 <-> (s <-> (1 <-> a))');
906  to_tsquery  
907 -------------
908  '2' <2> '1'
909 (1 row)
910
911 SELECT to_tsquery('english', 'foo <-> (a <-> (the <-> bar))');
912    to_tsquery    
913 -----------------
914  'foo' <3> 'bar'
915 (1 row)
916
917 SELECT to_tsquery('english', '((foo <-> a) <-> the) <-> bar');
918    to_tsquery    
919 -----------------
920  'foo' <3> 'bar'
921 (1 row)
922
923 SELECT to_tsquery('english', 'foo <-> a <-> the <-> bar');
924    to_tsquery    
925 -----------------
926  'foo' <3> 'bar'
927 (1 row)
928
929 SELECT phraseto_tsquery('english', 'PostgreSQL can be extended by the user in many ways');
930                      phraseto_tsquery                      
931 -----------------------------------------------------------
932  'postgresql' <3> 'extend' <3> 'user' <2> 'mani' <-> 'way'
933 (1 row)
934
935 SELECT ts_rank_cd(to_tsvector('english', '
936 Day after day, day after day,
937   We stuck, nor breath nor motion,
938 As idle as a painted Ship
939   Upon a painted Ocean.
940 Water, water, every where
941   And all the boards did shrink;
942 Water, water, every where,
943   Nor any drop to drink.
944 S. T. Coleridge (1772-1834)
945 '), to_tsquery('english', 'paint&water'));
946  ts_rank_cd 
947 ------------
948        0.05
949 (1 row)
950
951 SELECT ts_rank_cd(to_tsvector('english', '
952 Day after day, day after day,
953   We stuck, nor breath nor motion,
954 As idle as a painted Ship
955   Upon a painted Ocean.
956 Water, water, every where
957   And all the boards did shrink;
958 Water, water, every where,
959   Nor any drop to drink.
960 S. T. Coleridge (1772-1834)
961 '), to_tsquery('english', 'breath&motion&water'));
962  ts_rank_cd 
963 ------------
964  0.00833333
965 (1 row)
966
967 SELECT ts_rank_cd(to_tsvector('english', '
968 Day after day, day after day,
969   We stuck, nor breath nor motion,
970 As idle as a painted Ship
971   Upon a painted Ocean.
972 Water, water, every where
973   And all the boards did shrink;
974 Water, water, every where,
975   Nor any drop to drink.
976 S. T. Coleridge (1772-1834)
977 '), to_tsquery('english', 'ocean'));
978  ts_rank_cd 
979 ------------
980         0.1
981 (1 row)
982
983 SELECT ts_rank_cd(to_tsvector('english', '
984 Day after day, day after day,
985   We stuck, nor breath nor motion,
986 As idle as a painted Ship
987   Upon a painted Ocean.
988 Water, water, every where
989   And all the boards did shrink;
990 Water, water, every where,
991   Nor any drop to drink.
992 S. T. Coleridge (1772-1834)
993 '), to_tsquery('english', 'painted <-> Ship'));
994  ts_rank_cd 
995 ------------
996         0.1
997 (1 row)
998
999 SELECT ts_rank_cd(strip(to_tsvector('both stripped')),
1000                   to_tsquery('both & stripped'));
1001  ts_rank_cd 
1002 ------------
1003           0
1004 (1 row)
1005
1006 SELECT ts_rank_cd(to_tsvector('unstripped') || strip(to_tsvector('stripped')),
1007                   to_tsquery('unstripped & stripped'));
1008  ts_rank_cd 
1009 ------------
1010           0
1011 (1 row)
1012
1013 --headline tests
1014 SELECT ts_headline('english', '
1015 Day after day, day after day,
1016   We stuck, nor breath nor motion,
1017 As idle as a painted Ship
1018   Upon a painted Ocean.
1019 Water, water, every where
1020   And all the boards did shrink;
1021 Water, water, every where,
1022   Nor any drop to drink.
1023 S. T. Coleridge (1772-1834)
1024 ', to_tsquery('english', 'paint&water'));
1025                ts_headline               
1026 -----------------------------------------
1027  <b>painted</b> Ocean.                  +
1028  <b>Water</b>, <b>water</b>, every where+
1029    And all the boards did shrink;       +
1030  <b>Water</b>, <b>water</b>, every
1031 (1 row)
1032
1033 SELECT ts_headline('english', '
1034 Day after day, day after day,
1035   We stuck, nor breath nor motion,
1036 As idle as a painted Ship
1037   Upon a painted Ocean.
1038 Water, water, every where
1039   And all the boards did shrink;
1040 Water, water, every where,
1041   Nor any drop to drink.
1042 S. T. Coleridge (1772-1834)
1043 ', to_tsquery('english', 'breath&motion&water'));
1044            ts_headline            
1045 ----------------------------------
1046  <b>breath</b> nor <b>motion</b>,+
1047  As idle as a painted Ship       +
1048    Upon a painted Ocean.         +
1049  <b>Water</b>, <b>water</b>
1050 (1 row)
1051
1052 SELECT ts_headline('english', '
1053 Day after day, day after day,
1054   We stuck, nor breath nor motion,
1055 As idle as a painted Ship
1056   Upon a painted Ocean.
1057 Water, water, every where
1058   And all the boards did shrink;
1059 Water, water, every where,
1060   Nor any drop to drink.
1061 S. T. Coleridge (1772-1834)
1062 ', to_tsquery('english', 'ocean'));
1063            ts_headline            
1064 ----------------------------------
1065  <b>Ocean</b>.                   +
1066  Water, water, every where       +
1067    And all the boards did shrink;+
1068  Water, water, every where
1069 (1 row)
1070
1071 SELECT ts_headline('english', '
1072 Day after day, day after day,
1073   We stuck, nor breath nor motion,
1074 As idle as a painted Ship
1075   Upon a painted Ocean.
1076 Water, water, every where
1077   And all the boards did shrink;
1078 Water, water, every where,
1079   Nor any drop to drink.
1080 S. T. Coleridge (1772-1834)
1081 ', phraseto_tsquery('english', 'painted Ocean'));
1082            ts_headline            
1083 ----------------------------------
1084  <b>painted</b> <b>Ocean</b>.    +
1085  Water, water, every where       +
1086    And all the boards did shrink;+
1087  Water, water, every
1088 (1 row)
1089
1090 SELECT ts_headline('english', '
1091 Day after day, day after day,
1092   We stuck, nor breath nor motion,
1093 As idle as a painted Ship
1094   Upon a painted Ocean.
1095 Water, water, every where
1096   And all the boards did shrink;
1097 Water, water, every where,
1098   Nor any drop to drink.
1099 S. T. Coleridge (1772-1834)
1100 ', phraseto_tsquery('english', 'idle as a painted Ship'));
1101                  ts_headline                 
1102 ---------------------------------------------
1103  <b>idle</b> as a <b>painted</b> <b>Ship</b>+
1104    Upon a <b>painted</b> Ocean.             +
1105  Water, water, every where                  +
1106    And all the boards
1107 (1 row)
1108
1109 SELECT ts_headline('english', '
1110 <html>
1111 <!-- some comment -->
1112 <body>
1113 Sea view wow <u>foo bar</u> <i>qq</i>
1114 <a href="http://www.google.com/foo.bar.html" target="_blank">YES &nbsp;</a>
1115 ff-bg
1116 <script>
1117        document.write(15);
1118 </script>
1119 </body>
1120 </html>',
1121 to_tsquery('english', 'sea&foo'), 'HighlightAll=true');
1122                                  ts_headline                                 
1123 -----------------------------------------------------------------------------
1124                                                                             +
1125  <html>                                                                     +
1126  <!-- some comment -->                                                      +
1127  <body>                                                                     +
1128  <b>Sea</b> view wow <u><b>foo</b> bar</u> <i>qq</i>                        +
1129  <a href="http://www.google.com/foo.bar.html" target="_blank">YES &nbsp;</a>+
1130  ff-bg                                                                      +
1131  <script>                                                                   +
1132         document.write(15);                                                 +
1133  </script>                                                                  +
1134  </body>                                                                    +
1135  </html>
1136 (1 row)
1137
1138 SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 <-> 3', 'MaxWords=2, MinWords=1');
1139     ts_headline    
1140 -------------------
1141  <b>1</b> <b>3</b>
1142 (1 row)
1143
1144 SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 & 3', 'MaxWords=4, MinWords=1');
1145          ts_headline          
1146 ------------------------------
1147  <b>1</b> 2 <b>3</b> <b>1</b>
1148 (1 row)
1149
1150 SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 <-> 3', 'MaxWords=4, MinWords=1');
1151     ts_headline    
1152 -------------------
1153  <b>1</b> <b>3</b>
1154 (1 row)
1155
1156 --Check if headline fragments work
1157 SELECT ts_headline('english', '
1158 Day after day, day after day,
1159   We stuck, nor breath nor motion,
1160 As idle as a painted Ship
1161   Upon a painted Ocean.
1162 Water, water, every where
1163   And all the boards did shrink;
1164 Water, water, every where,
1165   Nor any drop to drink.
1166 S. T. Coleridge (1772-1834)
1167 ', to_tsquery('english', 'ocean'), 'MaxFragments=1');
1168             ts_headline             
1169 ------------------------------------
1170  after day,                        +
1171    We stuck, nor breath nor motion,+
1172  As idle as a painted Ship         +
1173    Upon a painted <b>Ocean</b>.    +
1174  Water, water, every where         +
1175    And all the boards did shrink;  +
1176  Water, water, every where,        +
1177    Nor any drop
1178 (1 row)
1179
1180 --Check if more than one fragments are displayed
1181 SELECT ts_headline('english', '
1182 Day after day, day after day,
1183   We stuck, nor breath nor motion,
1184 As idle as a painted Ship
1185   Upon a painted Ocean.
1186 Water, water, every where
1187   And all the boards did shrink;
1188 Water, water, every where,
1189   Nor any drop to drink.
1190 S. T. Coleridge (1772-1834)
1191 ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2');
1192                  ts_headline                  
1193 ----------------------------------------------
1194  after day, day after day,                   +
1195    We <b>stuck</b>, nor breath nor motion,   +
1196  As idle as a painted Ship                   +
1197    Upon a painted Ocean.                     +
1198  Water, water, every where                   +
1199    And all the boards did shrink;            +
1200  Water, water, every where ... drop to drink.+
1201  S. T. <b>Coleridge</b>
1202 (1 row)
1203
1204 --Fragments when there all query words are not in the document
1205 SELECT ts_headline('english', '
1206 Day after day, day after day,
1207   We stuck, nor breath nor motion,
1208 As idle as a painted Ship
1209   Upon a painted Ocean.
1210 Water, water, every where
1211   And all the boards did shrink;
1212 Water, water, every where,
1213   Nor any drop to drink.
1214 S. T. Coleridge (1772-1834)
1215 ', to_tsquery('english', 'ocean & seahorse'), 'MaxFragments=1');
1216             ts_headline             
1217 ------------------------------------
1218                                    +
1219  Day after day, day after day,     +
1220    We stuck, nor breath nor motion,+
1221  As idle as
1222 (1 row)
1223
1224 --FragmentDelimiter option
1225 SELECT ts_headline('english', '
1226 Day after day, day after day,
1227   We stuck, nor breath nor motion,
1228 As idle as a painted Ship
1229   Upon a painted Ocean.
1230 Water, water, every where
1231   And all the boards did shrink;
1232 Water, water, every where,
1233   Nor any drop to drink.
1234 S. T. Coleridge (1772-1834)
1235 ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2,FragmentDelimiter=***');
1236                 ts_headline                 
1237 --------------------------------------------
1238  after day, day after day,                 +
1239    We <b>stuck</b>, nor breath nor motion, +
1240  As idle as a painted Ship                 +
1241    Upon a painted Ocean.                   +
1242  Water, water, every where                 +
1243    And all the boards did shrink;          +
1244  Water, water, every where***drop to drink.+
1245  S. T. <b>Coleridge</b>
1246 (1 row)
1247
1248 --Rewrite sub system
1249 CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT);
1250 \set ECHO none
1251 ALTER TABLE test_tsquery ADD COLUMN keyword tsquery;
1252 UPDATE test_tsquery SET keyword = to_tsquery('english', txtkeyword);
1253 ALTER TABLE test_tsquery ADD COLUMN sample tsquery;
1254 UPDATE test_tsquery SET sample = to_tsquery('english', txtsample::text);
1255 SELECT COUNT(*) FROM test_tsquery WHERE keyword <  'new & york';
1256  count 
1257 -------
1258      2
1259 (1 row)
1260
1261 SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
1262  count 
1263 -------
1264      3
1265 (1 row)
1266
1267 SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
1268  count 
1269 -------
1270      1
1271 (1 row)
1272
1273 SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
1274  count 
1275 -------
1276      4
1277 (1 row)
1278
1279 SELECT COUNT(*) FROM test_tsquery WHERE keyword >  'new & york';
1280  count 
1281 -------
1282      3
1283 (1 row)
1284
1285 CREATE UNIQUE INDEX bt_tsq ON test_tsquery (keyword);
1286 SET enable_seqscan=OFF;
1287 SELECT COUNT(*) FROM test_tsquery WHERE keyword <  'new & york';
1288  count 
1289 -------
1290      2
1291 (1 row)
1292
1293 SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
1294  count 
1295 -------
1296      3
1297 (1 row)
1298
1299 SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
1300  count 
1301 -------
1302      1
1303 (1 row)
1304
1305 SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
1306  count 
1307 -------
1308      4
1309 (1 row)
1310
1311 SELECT COUNT(*) FROM test_tsquery WHERE keyword >  'new & york';
1312  count 
1313 -------
1314      3
1315 (1 row)
1316
1317 RESET enable_seqscan;
1318 SELECT ts_rewrite('foo & bar & qq & new & york',  'new & york'::tsquery, 'big & apple | nyc | new & york & city');
1319                                   ts_rewrite                                  
1320 ------------------------------------------------------------------------------
1321  'foo' & 'bar' & 'qq' & ( 'city' & 'new' & 'york' | 'nyc' | 'big' & 'apple' )
1322 (1 row)
1323
1324 SELECT ts_rewrite(ts_rewrite('new & !york ', 'york', '!jersey'),
1325                   'jersey', 'mexico');
1326      ts_rewrite     
1327 --------------------
1328  'new' & !!'mexico'
1329 (1 row)
1330
1331 SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
1332      ts_rewrite      
1333 ---------------------
1334  'moskva' | 'moscow'
1335 (1 row)
1336
1337 SELECT ts_rewrite('moscow & hotel', 'SELECT keyword, sample FROM test_tsquery'::text );
1338             ts_rewrite             
1339 -----------------------------------
1340  'hotel' & ( 'moskva' | 'moscow' )
1341 (1 row)
1342
1343 SELECT ts_rewrite('bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery'::text );
1344                                    ts_rewrite                                    
1345 ---------------------------------------------------------------------------------
1346  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1347 (1 row)
1348
1349 SELECT ts_rewrite( 'moscow', 'SELECT keyword, sample FROM test_tsquery');
1350      ts_rewrite      
1351 ---------------------
1352  'moskva' | 'moscow'
1353 (1 row)
1354
1355 SELECT ts_rewrite( 'moscow & hotel', 'SELECT keyword, sample FROM test_tsquery');
1356             ts_rewrite             
1357 -----------------------------------
1358  'hotel' & ( 'moskva' | 'moscow' )
1359 (1 row)
1360
1361 SELECT ts_rewrite( 'bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery');
1362                                    ts_rewrite                                    
1363 ---------------------------------------------------------------------------------
1364  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1365 (1 row)
1366
1367 SELECT ts_rewrite('1 & (2 <-> 3)', 'SELECT keyword, sample FROM test_tsquery'::text );
1368  ts_rewrite  
1369 -------------
1370  '2' <-> '4'
1371 (1 row)
1372
1373 SELECT ts_rewrite('1 & (2 <2> 3)', 'SELECT keyword, sample FROM test_tsquery'::text );
1374     ts_rewrite     
1375 -------------------
1376  '1' & '2' <2> '3'
1377 (1 row)
1378
1379 SELECT ts_rewrite('5 <-> (1 & (2 <-> 3))', 'SELECT keyword, sample FROM test_tsquery'::text );
1380        ts_rewrite        
1381 -------------------------
1382  '5' <-> ( '2' <-> '4' )
1383 (1 row)
1384
1385 SELECT ts_rewrite('5 <-> (6 | 8)', 'SELECT keyword, sample FROM test_tsquery'::text );
1386       ts_rewrite       
1387 -----------------------
1388  '5' <-> ( '6' | '8' )
1389 (1 row)
1390
1391 -- Check empty substitution
1392 SELECT ts_rewrite(to_tsquery('5 & (6 | 5)'), to_tsquery('5'), to_tsquery(''));
1393 NOTICE:  text-search query doesn't contain lexemes: ""
1394  ts_rewrite 
1395 ------------
1396  '6'
1397 (1 row)
1398
1399 SELECT ts_rewrite(to_tsquery('!5'), to_tsquery('5'), to_tsquery(''));
1400 NOTICE:  text-search query doesn't contain lexemes: ""
1401  ts_rewrite 
1402 ------------
1403  
1404 (1 row)
1405
1406 SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
1407     keyword     
1408 ----------------
1409  'new' & 'york'
1410 (1 row)
1411
1412 SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
1413  keyword  
1414 ----------
1415  'moscow'
1416 (1 row)
1417
1418 SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
1419  keyword 
1420 ---------
1421 (0 rows)
1422
1423 SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
1424  keyword  
1425 ----------
1426  'moscow'
1427 (1 row)
1428
1429 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
1430      ts_rewrite      
1431 ---------------------
1432  'moskva' | 'moscow'
1433 (1 row)
1434
1435 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
1436             ts_rewrite             
1437 -----------------------------------
1438  'hotel' & ( 'moskva' | 'moscow' )
1439 (1 row)
1440
1441 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar &  new & qq & foo & york') AS query;
1442                                    ts_rewrite                                    
1443 ---------------------------------------------------------------------------------
1444  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1445 (1 row)
1446
1447 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
1448      ts_rewrite      
1449 ---------------------
1450  'moskva' | 'moscow'
1451 (1 row)
1452
1453 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
1454             ts_rewrite             
1455 -----------------------------------
1456  'hotel' & ( 'moskva' | 'moscow' )
1457 (1 row)
1458
1459 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
1460                                    ts_rewrite                                    
1461 ---------------------------------------------------------------------------------
1462  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1463 (1 row)
1464
1465 CREATE INDEX qq ON test_tsquery USING gist (keyword tsquery_ops);
1466 SET enable_seqscan=OFF;
1467 SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
1468     keyword     
1469 ----------------
1470  'new' & 'york'
1471 (1 row)
1472
1473 SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
1474  keyword  
1475 ----------
1476  'moscow'
1477 (1 row)
1478
1479 SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
1480  keyword 
1481 ---------
1482 (0 rows)
1483
1484 SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
1485  keyword  
1486 ----------
1487  'moscow'
1488 (1 row)
1489
1490 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
1491      ts_rewrite      
1492 ---------------------
1493  'moskva' | 'moscow'
1494 (1 row)
1495
1496 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
1497             ts_rewrite             
1498 -----------------------------------
1499  'hotel' & ( 'moskva' | 'moscow' )
1500 (1 row)
1501
1502 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
1503                                    ts_rewrite                                    
1504 ---------------------------------------------------------------------------------
1505  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1506 (1 row)
1507
1508 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
1509      ts_rewrite      
1510 ---------------------
1511  'moskva' | 'moscow'
1512 (1 row)
1513
1514 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
1515             ts_rewrite             
1516 -----------------------------------
1517  'hotel' & ( 'moskva' | 'moscow' )
1518 (1 row)
1519
1520 SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar &  new & qq & foo & york') AS query;
1521                                    ts_rewrite                                    
1522 ---------------------------------------------------------------------------------
1523  'citi' & 'foo' & ( 'bar' | 'qq' ) & ( 'nyc' | 'big' & 'appl' | 'new' & 'york' )
1524 (1 row)
1525
1526 SELECT ts_rewrite(tsquery_phrase('foo', 'foo'), 'foo', 'bar | baz');
1527                ts_rewrite                
1528 -----------------------------------------
1529  ( 'bar' | 'baz' ) <-> ( 'bar' | 'baz' )
1530 (1 row)
1531
1532 SELECT to_tsvector('foo bar') @@
1533   ts_rewrite(tsquery_phrase('foo', 'foo'), 'foo', 'bar | baz');
1534  ?column? 
1535 ----------
1536  f
1537 (1 row)
1538
1539 SELECT to_tsvector('bar baz') @@
1540   ts_rewrite(tsquery_phrase('foo', 'foo'), 'foo', 'bar | baz');
1541  ?column? 
1542 ----------
1543  t
1544 (1 row)
1545
1546 RESET enable_seqscan;
1547 --test GUC
1548 SET default_text_search_config=simple;
1549 SELECT to_tsvector('SKIES My booKs');
1550         to_tsvector         
1551 ----------------------------
1552  'books':3 'my':2 'skies':1
1553 (1 row)
1554
1555 SELECT plainto_tsquery('SKIES My booKs');
1556      plainto_tsquery      
1557 --------------------------
1558  'skies' & 'my' & 'books'
1559 (1 row)
1560
1561 SELECT to_tsquery('SKIES & My | booKs');
1562         to_tsquery        
1563 --------------------------
1564  'skies' & 'my' | 'books'
1565 (1 row)
1566
1567 SET default_text_search_config=english;
1568 SELECT to_tsvector('SKIES My booKs');
1569    to_tsvector    
1570 ------------------
1571  'book':3 'sky':1
1572 (1 row)
1573
1574 SELECT plainto_tsquery('SKIES My booKs');
1575  plainto_tsquery 
1576 -----------------
1577  'sky' & 'book'
1578 (1 row)
1579
1580 SELECT to_tsquery('SKIES & My | booKs');
1581    to_tsquery   
1582 ----------------
1583  'sky' | 'book'
1584 (1 row)
1585
1586 --trigger
1587 CREATE TRIGGER tsvectorupdate
1588 BEFORE UPDATE OR INSERT ON test_tsvector
1589 FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(a, 'pg_catalog.english', t);
1590 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1591  count 
1592 -------
1593      0
1594 (1 row)
1595
1596 INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
1597 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1598  count 
1599 -------
1600      1
1601 (1 row)
1602
1603 UPDATE test_tsvector SET t = null WHERE t = '345 qwerty';
1604 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1605  count 
1606 -------
1607      0
1608 (1 row)
1609
1610 INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
1611 SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
1612  count 
1613 -------
1614      1
1615 (1 row)
1616
1617 -- test finding items in GIN's pending list
1618 create temp table pendtest (ts tsvector);
1619 create index pendtest_idx on pendtest using gin(ts);
1620 insert into pendtest values (to_tsvector('Lore ipsam'));
1621 insert into pendtest values (to_tsvector('Lore ipsum'));
1622 select * from pendtest where 'ipsu:*'::tsquery @@ ts;
1623          ts         
1624 --------------------
1625  'ipsum':2 'lore':1
1626 (1 row)
1627
1628 select * from pendtest where 'ipsa:*'::tsquery @@ ts;
1629          ts         
1630 --------------------
1631  'ipsam':2 'lore':1
1632 (1 row)
1633
1634 select * from pendtest where 'ips:*'::tsquery @@ ts;
1635          ts         
1636 --------------------
1637  'ipsam':2 'lore':1
1638  'ipsum':2 'lore':1
1639 (2 rows)
1640
1641 select * from pendtest where 'ipt:*'::tsquery @@ ts;
1642  ts 
1643 ----
1644 (0 rows)
1645
1646 select * from pendtest where 'ipi:*'::tsquery @@ ts;
1647  ts 
1648 ----
1649 (0 rows)
1650
1651 --check OP_PHRASE on index
1652 create temp table phrase_index_test(fts tsvector);
1653 insert into phrase_index_test values ('A fat cat has just eaten a rat.');
1654 insert into phrase_index_test values (to_tsvector('english', 'A fat cat has just eaten a rat.'));
1655 create index phrase_index_test_idx on phrase_index_test using gin(fts);
1656 set enable_seqscan = off;
1657 select * from phrase_index_test where fts @@ phraseto_tsquery('english', 'fat cat');
1658                 fts                
1659 -----------------------------------
1660  'cat':3 'eaten':6 'fat':2 'rat':8
1661 (1 row)
1662
1663 set enable_seqscan = on;