1--Base tsvector test
2SELECT '1'::tsvector;
3 tsvector
4----------
5 '1'
6(1 row)
7
8SELECT '1 '::tsvector;
9 tsvector
10----------
11 '1'
12(1 row)
13
14SELECT ' 1'::tsvector;
15 tsvector
16----------
17 '1'
18(1 row)
19
20SELECT ' 1 '::tsvector;
21 tsvector
22----------
23 '1'
24(1 row)
25
26SELECT '1 2'::tsvector;
27 tsvector
28----------
29 '1' '2'
30(1 row)
31
32SELECT '''1 2'''::tsvector;
33 tsvector
34----------
35 '1 2'
36(1 row)
37
38SELECT E'''1 \\''2'''::tsvector;
39 tsvector
40----------
41 '1 ''2'
42(1 row)
43
44SELECT E'''1 \\''2''3'::tsvector;
45  tsvector
46-------------
47 '1 ''2' '3'
48(1 row)
49
50SELECT E'''1 \\''2'' 3'::tsvector;
51  tsvector
52-------------
53 '1 ''2' '3'
54(1 row)
55
56SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector;
57     tsvector
58------------------
59 ' 3' '1 ''2' '4'
60(1 row)
61
62SELECT $$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector;
63                tsvector
64----------------------------------------
65 'AB\\c' '\\as' 'ab\\\\c' 'ab\\c' 'abc'
66(1 row)
67
68SELECT tsvectorin(tsvectorout($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector));
69               tsvectorin
70----------------------------------------
71 'AB\\c' '\\as' 'ab\\\\c' 'ab\\c' 'abc'
72(1 row)
73
74SELECT '''w'':4A,3B,2C,1D,5 a:8';
75       ?column?
76-----------------------
77 'w':4A,3B,2C,1D,5 a:8
78(1 row)
79
80SELECT 'a:3A b:2a'::tsvector || 'ba:1234 a:1B';
81          ?column?
82----------------------------
83 'a':3A,4B 'b':2A 'ba':1237
84(1 row)
85
86--Base tsquery test
87SELECT '1'::tsquery;
88 tsquery
89---------
90 '1'
91(1 row)
92
93SELECT '1 '::tsquery;
94 tsquery
95---------
96 '1'
97(1 row)
98
99SELECT ' 1'::tsquery;
100 tsquery
101---------
102 '1'
103(1 row)
104
105SELECT ' 1 '::tsquery;
106 tsquery
107---------
108 '1'
109(1 row)
110
111SELECT '''1 2'''::tsquery;
112 tsquery
113---------
114 '1 2'
115(1 row)
116
117SELECT E'''1 \\''2'''::tsquery;
118 tsquery
119---------
120 '1 ''2'
121(1 row)
122
123SELECT '!1'::tsquery;
124 tsquery
125---------
126 !'1'
127(1 row)
128
129SELECT '1|2'::tsquery;
130  tsquery
131-----------
132 '1' | '2'
133(1 row)
134
135SELECT '1|!2'::tsquery;
136  tsquery
137------------
138 '1' | !'2'
139(1 row)
140
141SELECT '!1|2'::tsquery;
142  tsquery
143------------
144 !'1' | '2'
145(1 row)
146
147SELECT '!1|!2'::tsquery;
148   tsquery
149-------------
150 !'1' | !'2'
151(1 row)
152
153SELECT '!(!1|!2)'::tsquery;
154     tsquery
155------------------
156 !( !'1' | !'2' )
157(1 row)
158
159SELECT '!(!1|2)'::tsquery;
160     tsquery
161-----------------
162 !( !'1' | '2' )
163(1 row)
164
165SELECT '!(1|!2)'::tsquery;
166     tsquery
167-----------------
168 !( '1' | !'2' )
169(1 row)
170
171SELECT '!(1|2)'::tsquery;
172    tsquery
173----------------
174 !( '1' | '2' )
175(1 row)
176
177SELECT '1&2'::tsquery;
178  tsquery
179-----------
180 '1' & '2'
181(1 row)
182
183SELECT '!1&2'::tsquery;
184  tsquery
185------------
186 !'1' & '2'
187(1 row)
188
189SELECT '1&!2'::tsquery;
190  tsquery
191------------
192 '1' & !'2'
193(1 row)
194
195SELECT '!1&!2'::tsquery;
196   tsquery
197-------------
198 !'1' & !'2'
199(1 row)
200
201SELECT '(1&2)'::tsquery;
202  tsquery
203-----------
204 '1' & '2'
205(1 row)
206
207SELECT '1&(2)'::tsquery;
208  tsquery
209-----------
210 '1' & '2'
211(1 row)
212
213SELECT '!(1)&2'::tsquery;
214  tsquery
215------------
216 !'1' & '2'
217(1 row)
218
219SELECT '!(1&2)'::tsquery;
220    tsquery
221----------------
222 !( '1' & '2' )
223(1 row)
224
225SELECT '1|2&3'::tsquery;
226     tsquery
227-----------------
228 '1' | '2' & '3'
229(1 row)
230
231SELECT '1|(2&3)'::tsquery;
232     tsquery
233-----------------
234 '1' | '2' & '3'
235(1 row)
236
237SELECT '(1|2)&3'::tsquery;
238       tsquery
239---------------------
240 ( '1' | '2' ) & '3'
241(1 row)
242
243SELECT '1|2&!3'::tsquery;
244     tsquery
245------------------
246 '1' | '2' & !'3'
247(1 row)
248
249SELECT '1|!2&3'::tsquery;
250     tsquery
251------------------
252 '1' | !'2' & '3'
253(1 row)
254
255SELECT '!1|2&3'::tsquery;
256     tsquery
257------------------
258 !'1' | '2' & '3'
259(1 row)
260
261SELECT '!1|(2&3)'::tsquery;
262     tsquery
263------------------
264 !'1' | '2' & '3'
265(1 row)
266
267SELECT '!(1|2)&3'::tsquery;
268       tsquery
269----------------------
270 !( '1' | '2' ) & '3'
271(1 row)
272
273SELECT '(!1|2)&3'::tsquery;
274       tsquery
275----------------------
276 ( !'1' | '2' ) & '3'
277(1 row)
278
279SELECT '1|(2|(4|(5|6)))'::tsquery;
280           tsquery
281-----------------------------
282 '1' | '2' | '4' | '5' | '6'
283(1 row)
284
285SELECT '1|2|4|5|6'::tsquery;
286           tsquery
287-----------------------------
288 '1' | '2' | '4' | '5' | '6'
289(1 row)
290
291SELECT '1&(2&(4&(5&6)))'::tsquery;
292           tsquery
293-----------------------------
294 '1' & '2' & '4' & '5' & '6'
295(1 row)
296
297SELECT '1&2&4&5&6'::tsquery;
298           tsquery
299-----------------------------
300 '1' & '2' & '4' & '5' & '6'
301(1 row)
302
303SELECT '1&(2&(4&(5|6)))'::tsquery;
304             tsquery
305---------------------------------
306 '1' & '2' & '4' & ( '5' | '6' )
307(1 row)
308
309SELECT '1&(2&(4&(5|!6)))'::tsquery;
310             tsquery
311----------------------------------
312 '1' & '2' & '4' & ( '5' | !'6' )
313(1 row)
314
315SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
316                 tsquery
317------------------------------------------
318 '1' & '2' & ' 4' & ( '|5' | '6 '' !|&' )
319(1 row)
320
321SELECT $$'\\as'$$::tsquery;
322 tsquery
323---------
324 '\\as'
325(1 row)
326
327SELECT 'a:* & nbb:*ac | doo:a* | goo'::tsquery;
328               tsquery
329--------------------------------------
330 'a':* & 'nbb':*AC | 'doo':*A | 'goo'
331(1 row)
332
333SELECT '!!b'::tsquery;
334 tsquery
335---------
336 !!'b'
337(1 row)
338
339SELECT '!!!b'::tsquery;
340 tsquery
341---------
342 !!!'b'
343(1 row)
344
345SELECT '!(!b)'::tsquery;
346 tsquery
347---------
348 !!'b'
349(1 row)
350
351SELECT 'a & !!b'::tsquery;
352   tsquery
353-------------
354 'a' & !!'b'
355(1 row)
356
357SELECT '!!a & b'::tsquery;
358   tsquery
359-------------
360 !!'a' & 'b'
361(1 row)
362
363SELECT '!!a & !!b'::tsquery;
364    tsquery
365---------------
366 !!'a' & !!'b'
367(1 row)
368
369--comparisons
370SELECT 'a' < 'b & c'::tsquery as "true";
371 true
372------
373 t
374(1 row)
375
376SELECT 'a' > 'b & c'::tsquery as "false";
377 false
378-------
379 f
380(1 row)
381
382SELECT 'a | f' < 'b & c'::tsquery as "false";
383 false
384-------
385 t
386(1 row)
387
388SELECT 'a | ff' < 'b & c'::tsquery as "false";
389 false
390-------
391 f
392(1 row)
393
394SELECT 'a | f | g' < 'b & c'::tsquery as "false";
395 false
396-------
397 f
398(1 row)
399
400--concatenation
401SELECT numnode( 'new'::tsquery );
402 numnode
403---------
404       1
405(1 row)
406
407SELECT numnode( 'new & york'::tsquery );
408 numnode
409---------
410       3
411(1 row)
412
413SELECT numnode( 'new & york | qwery'::tsquery );
414 numnode
415---------
416       5
417(1 row)
418
419SELECT 'foo & bar'::tsquery && 'asd';
420       ?column?
421-----------------------
422 'foo' & 'bar' & 'asd'
423(1 row)
424
425SELECT 'foo & bar'::tsquery || 'asd & fg';
426           ?column?
427------------------------------
428 'foo' & 'bar' | 'asd' & 'fg'
429(1 row)
430
431SELECT 'foo & bar'::tsquery || !!'asd & fg'::tsquery;
432             ?column?
433-----------------------------------
434 'foo' & 'bar' | !( 'asd' & 'fg' )
435(1 row)
436
437SELECT 'foo & bar'::tsquery && 'asd | fg';
438             ?column?
439----------------------------------
440 'foo' & 'bar' & ( 'asd' | 'fg' )
441(1 row)
442
443SELECT 'a' <-> 'b & d'::tsquery;
444       ?column?
445-----------------------
446 'a' <-> ( 'b' & 'd' )
447(1 row)
448
449SELECT 'a & g' <-> 'b & d'::tsquery;
450            ?column?
451---------------------------------
452 ( 'a' & 'g' ) <-> ( 'b' & 'd' )
453(1 row)
454
455SELECT 'a & g' <-> 'b | d'::tsquery;
456            ?column?
457---------------------------------
458 ( 'a' & 'g' ) <-> ( 'b' | 'd' )
459(1 row)
460
461SELECT 'a & g' <-> 'b <-> d'::tsquery;
462             ?column?
463-----------------------------------
464 ( 'a' & 'g' ) <-> ( 'b' <-> 'd' )
465(1 row)
466
467SELECT tsquery_phrase('a <3> g', 'b & d', 10);
468         tsquery_phrase
469--------------------------------
470 'a' <3> 'g' <10> ( 'b' & 'd' )
471(1 row)
472
473-- tsvector-tsquery operations
474SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca' as "true";
475 true
476------
477 t
478(1 row)
479
480SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:B' as "true";
481 true
482------
483 t
484(1 row)
485
486SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:A' as "true";
487 true
488------
489 t
490(1 row)
491
492SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:C' as "false";
493 false
494-------
495 f
496(1 row)
497
498SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:CB' as "true";
499 true
500------
501 t
502(1 row)
503
504SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*C' as "false";
505 false
506-------
507 f
508(1 row)
509
510SELECT 'a b:89  ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*CB' as "true";
511 true
512------
513 t
514(1 row)
515
516SELECT 'a b:89  ca:23A,64b cb:80c d:34c'::tsvector @@ 'd:AC & c:*C' as "true";
517 true
518------
519 t
520(1 row)
521
522SELECT 'a b:89  ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*C' as "true";
523 true
524------
525 t
526(1 row)
527
528SELECT 'a b:89  ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*B' as "true";
529 true
530------
531 t
532(1 row)
533
534SELECT 'wa:1D wb:2A'::tsvector @@ 'w:*D & w:*A'::tsquery as "true";
535 true
536------
537 t
538(1 row)
539
540SELECT 'wa:1D wb:2A'::tsvector @@ 'w:*D <-> w:*A'::tsquery as "true";
541 true
542------
543 t
544(1 row)
545
546SELECT 'wa:1A wb:2D'::tsvector @@ 'w:*D <-> w:*A'::tsquery as "false";
547 false
548-------
549 f
550(1 row)
551
552SELECT 'supernova'::tsvector @@ 'super'::tsquery AS "false";
553 false
554-------
555 f
556(1 row)
557
558SELECT 'supeanova supernova'::tsvector @@ 'super'::tsquery AS "false";
559 false
560-------
561 f
562(1 row)
563
564SELECT 'supeznova supernova'::tsvector @@ 'super'::tsquery AS "false";
565 false
566-------
567 f
568(1 row)
569
570SELECT 'supernova'::tsvector @@ 'super:*'::tsquery AS "true";
571 true
572------
573 t
574(1 row)
575
576SELECT 'supeanova supernova'::tsvector @@ 'super:*'::tsquery AS "true";
577 true
578------
579 t
580(1 row)
581
582SELECT 'supeznova supernova'::tsvector @@ 'super:*'::tsquery AS "true";
583 true
584------
585 t
586(1 row)
587
588--phrase search
589SELECT to_tsvector('simple', '1 2 3 1') @@ '1 <-> 2' AS "true";
590 true
591------
592 t
593(1 row)
594
595SELECT to_tsvector('simple', '1 2 3 1') @@ '1 <2> 2' AS "false";
596 false
597-------
598 f
599(1 row)
600
601SELECT to_tsvector('simple', '1 2 3 1') @@ '1 <-> 3' AS "false";
602 false
603-------
604 f
605(1 row)
606
607SELECT to_tsvector('simple', '1 2 3 1') @@ '1 <2> 3' AS "true";
608 true
609------
610 t
611(1 row)
612
613SELECT to_tsvector('simple', '1 2 1 2') @@ '1 <3> 2' AS "true";
614 true
615------
616 t
617(1 row)
618
619SELECT to_tsvector('simple', '1 2 11 3') @@ '1 <-> 3' AS "false";
620 false
621-------
622 f
623(1 row)
624
625SELECT to_tsvector('simple', '1 2 11 3') @@ '1:* <-> 3' AS "true";
626 true
627------
628 t
629(1 row)
630
631SELECT to_tsvector('simple', '1 2 3 4') @@ '1 <-> 2 <-> 3' AS "true";
632 true
633------
634 t
635(1 row)
636
637SELECT to_tsvector('simple', '1 2 3 4') @@ '(1 <-> 2) <-> 3' AS "true";
638 true
639------
640 t
641(1 row)
642
643SELECT to_tsvector('simple', '1 2 3 4') @@ '1 <-> (2 <-> 3)' AS "true";
644 true
645------
646 t
647(1 row)
648
649SELECT to_tsvector('simple', '1 2 3 4') @@ '1 <2> (2 <-> 3)' AS "false";
650 false
651-------
652 f
653(1 row)
654
655SELECT to_tsvector('simple', '1 2 1 2 3 4') @@ '(1 <-> 2) <-> 3' AS "true";
656 true
657------
658 t
659(1 row)
660
661SELECT to_tsvector('simple', '1 2 1 2 3 4') @@ '1 <-> 2 <-> 3' AS "true";
662 true
663------
664 t
665(1 row)
666
667-- without position data, phrase search does not match
668SELECT strip(to_tsvector('simple', '1 2 3 4')) @@ '1 <-> 2 <-> 3' AS "false";
669 false
670-------
671 f
672(1 row)
673
674select to_tsvector('simple', 'q x q y') @@ 'q <-> (x & y)' AS "false";
675 false
676-------
677 f
678(1 row)
679
680select to_tsvector('simple', 'q x') @@ 'q <-> (x | y <-> z)' AS "true";
681 true
682------
683 t
684(1 row)
685
686select to_tsvector('simple', 'q y') @@ 'q <-> (x | y <-> z)' AS "false";
687 false
688-------
689 f
690(1 row)
691
692select to_tsvector('simple', 'q y z') @@ 'q <-> (x | y <-> z)' AS "true";
693 true
694------
695 t
696(1 row)
697
698select to_tsvector('simple', 'q y x') @@ 'q <-> (x | y <-> z)' AS "false";
699 false
700-------
701 f
702(1 row)
703
704select to_tsvector('simple', 'q x y') @@ 'q <-> (x | y <-> z)' AS "true";
705 true
706------
707 t
708(1 row)
709
710select to_tsvector('simple', 'q x') @@ '(x | y <-> z) <-> q' AS "false";
711 false
712-------
713 f
714(1 row)
715
716select to_tsvector('simple', 'x q') @@ '(x | y <-> z) <-> q' AS "true";
717 true
718------
719 t
720(1 row)
721
722select to_tsvector('simple', 'x y q') @@ '(x | y <-> z) <-> q' AS "false";
723 false
724-------
725 f
726(1 row)
727
728select to_tsvector('simple', 'x y z') @@ '(x | y <-> z) <-> q' AS "false";
729 false
730-------
731 f
732(1 row)
733
734select to_tsvector('simple', 'x y z q') @@ '(x | y <-> z) <-> q' AS "true";
735 true
736------
737 t
738(1 row)
739
740select to_tsvector('simple', 'y z q') @@ '(x | y <-> z) <-> q' AS "true";
741 true
742------
743 t
744(1 row)
745
746select to_tsvector('simple', 'y y q') @@ '(x | y <-> z) <-> q' AS "false";
747 false
748-------
749 f
750(1 row)
751
752select to_tsvector('simple', 'y y q') @@ '(!x | y <-> z) <-> q' AS "true";
753 true
754------
755 t
756(1 row)
757
758select to_tsvector('simple', 'x y q') @@ '(!x | y <-> z) <-> q' AS "true";
759 true
760------
761 t
762(1 row)
763
764select to_tsvector('simple', 'y y q') @@ '(x | y <-> !z) <-> q' AS "true";
765 true
766------
767 t
768(1 row)
769
770select to_tsvector('simple', 'x q') @@ '(x | y <-> !z) <-> q' AS "true";
771 true
772------
773 t
774(1 row)
775
776select to_tsvector('simple', 'x q') @@ '(!x | y <-> z) <-> q' AS "false";
777 false
778-------
779 f
780(1 row)
781
782select to_tsvector('simple', 'z q') @@ '(!x | y <-> z) <-> q' AS "true";
783 true
784------
785 t
786(1 row)
787
788select to_tsvector('simple', 'x y q') @@ '(!x | y) <-> y <-> q' AS "false";
789 false
790-------
791 f
792(1 row)
793
794select to_tsvector('simple', 'x y q') @@ '(!x | !y) <-> y <-> q' AS "true";
795 true
796------
797 t
798(1 row)
799
800select to_tsvector('simple', 'x y q') @@ '(x | !y) <-> y <-> q' AS "true";
801 true
802------
803 t
804(1 row)
805
806select to_tsvector('simple', 'x y q') @@ '(x | !!z) <-> y <-> q' AS "true";
807 true
808------
809 t
810(1 row)
811
812select to_tsvector('simple', 'x y q y') @@ '!x <-> y' AS "true";
813 true
814------
815 t
816(1 row)
817
818select to_tsvector('simple', 'x y q y') @@ '!x <-> !y' AS "true";
819 true
820------
821 t
822(1 row)
823
824select to_tsvector('simple', 'x y q y') @@ '!x <-> !!y' AS "true";
825 true
826------
827 t
828(1 row)
829
830select to_tsvector('simple', 'x y q y') @@ '!(x <-> y)' AS "false";
831 false
832-------
833 f
834(1 row)
835
836select to_tsvector('simple', 'x y q y') @@ '!(x <2> y)' AS "true";
837 true
838------
839 t
840(1 row)
841
842select strip(to_tsvector('simple', 'x y q y')) @@ '!x <-> y' AS "false";
843 false
844-------
845 f
846(1 row)
847
848select strip(to_tsvector('simple', 'x y q y')) @@ '!x <-> !y' AS "false";
849 false
850-------
851 f
852(1 row)
853
854select strip(to_tsvector('simple', 'x y q y')) @@ '!x <-> !!y' AS "false";
855 false
856-------
857 f
858(1 row)
859
860select strip(to_tsvector('simple', 'x y q y')) @@ '!(x <-> y)' AS "true";
861 true
862------
863 t
864(1 row)
865
866select strip(to_tsvector('simple', 'x y q y')) @@ '!(x <2> y)' AS "true";
867 true
868------
869 t
870(1 row)
871
872select to_tsvector('simple', 'x y q y') @@ '!foo' AS "true";
873 true
874------
875 t
876(1 row)
877
878select to_tsvector('simple', '') @@ '!foo' AS "true";
879 true
880------
881 t
882(1 row)
883
884--ranking
885SELECT ts_rank(' a:1 s:2C d g'::tsvector, 'a | s');
886  ts_rank
887-----------
888 0.0911891
889(1 row)
890
891SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s');
892  ts_rank
893-----------
894 0.0303964
895(1 row)
896
897SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s:*');
898  ts_rank
899-----------
900 0.0911891
901(1 row)
902
903SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | sa:*');
904  ts_rank
905-----------
906 0.0911891
907(1 row)
908
909SELECT ts_rank(' a:1 s:2B d g'::tsvector, 'a | s');
910 ts_rank
911----------
912 0.151982
913(1 row)
914
915SELECT ts_rank(' a:1 s:2 d g'::tsvector, 'a | s');
916  ts_rank
917-----------
918 0.0607927
919(1 row)
920
921SELECT ts_rank(' a:1 s:2C d g'::tsvector, 'a & s');
922 ts_rank
923----------
924 0.140153
925(1 row)
926
927SELECT ts_rank(' a:1 s:2B d g'::tsvector, 'a & s');
928 ts_rank
929----------
930 0.198206
931(1 row)
932
933SELECT ts_rank(' a:1 s:2 d g'::tsvector, 'a & s');
934  ts_rank
935-----------
936 0.0991032
937(1 row)
938
939SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a | s');
940 ts_rank_cd
941------------
942        0.3
943(1 row)
944
945SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s');
946 ts_rank_cd
947------------
948        0.1
949(1 row)
950
951SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s:*');
952 ts_rank_cd
953------------
954        0.3
955(1 row)
956
957SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | sa:*');
958 ts_rank_cd
959------------
960        0.3
961(1 row)
962
963SELECT ts_rank_cd(' a:1 sa:3C sab:2c d g'::tsvector, 'a | sa:*');
964 ts_rank_cd
965------------
966        0.5
967(1 row)
968
969SELECT ts_rank_cd(' a:1 s:2B d g'::tsvector, 'a | s');
970 ts_rank_cd
971------------
972        0.5
973(1 row)
974
975SELECT ts_rank_cd(' a:1 s:2 d g'::tsvector, 'a | s');
976 ts_rank_cd
977------------
978        0.2
979(1 row)
980
981SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a & s');
982 ts_rank_cd
983------------
984   0.133333
985(1 row)
986
987SELECT ts_rank_cd(' a:1 s:2B d g'::tsvector, 'a & s');
988 ts_rank_cd
989------------
990       0.16
991(1 row)
992
993SELECT ts_rank_cd(' a:1 s:2 d g'::tsvector, 'a & s');
994 ts_rank_cd
995------------
996        0.1
997(1 row)
998
999SELECT ts_rank_cd(' a:1 s:2A d g'::tsvector, 'a <-> s');
1000 ts_rank_cd
1001------------
1002   0.181818
1003(1 row)
1004
1005SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a <-> s');
1006 ts_rank_cd
1007------------
1008   0.133333
1009(1 row)
1010
1011SELECT ts_rank_cd(' a:1 s:2 d g'::tsvector, 'a <-> s');
1012 ts_rank_cd
1013------------
1014        0.1
1015(1 row)
1016
1017SELECT ts_rank_cd(' a:1 s:2 d:2A g'::tsvector, 'a <-> s');
1018 ts_rank_cd
1019------------
1020        0.1
1021(1 row)
1022
1023SELECT ts_rank_cd(' a:1 s:2,3A d:2A g'::tsvector, 'a <2> s:A');
1024 ts_rank_cd
1025------------
1026  0.0909091
1027(1 row)
1028
1029SELECT ts_rank_cd(' a:1 b:2 s:3A d:2A g'::tsvector, 'a <2> s:A');
1030 ts_rank_cd
1031------------
1032  0.0909091
1033(1 row)
1034
1035SELECT ts_rank_cd(' a:1 sa:2D sb:2A g'::tsvector, 'a <-> s:*');
1036 ts_rank_cd
1037------------
1038        0.1
1039(1 row)
1040
1041SELECT ts_rank_cd(' a:1 sa:2A sb:2D g'::tsvector, 'a <-> s:*');
1042 ts_rank_cd
1043------------
1044        0.1
1045(1 row)
1046
1047SELECT ts_rank_cd(' a:1 sa:2A sb:2D g'::tsvector, 'a <-> s:* <-> sa:A');
1048 ts_rank_cd
1049------------
1050          0
1051(1 row)
1052
1053SELECT ts_rank_cd(' a:1 sa:2A sb:2D g'::tsvector, 'a <-> s:* <-> sa:B');
1054 ts_rank_cd
1055------------
1056          0
1057(1 row)
1058
1059SELECT 'a:1 b:2'::tsvector @@ 'a <-> b'::tsquery AS "true";
1060 true
1061------
1062 t
1063(1 row)
1064
1065SELECT 'a:1 b:2'::tsvector @@ 'a <0> b'::tsquery AS "false";
1066 false
1067-------
1068 f
1069(1 row)
1070
1071SELECT 'a:1 b:2'::tsvector @@ 'a <1> b'::tsquery AS "true";
1072 true
1073------
1074 t
1075(1 row)
1076
1077SELECT 'a:1 b:2'::tsvector @@ 'a <2> b'::tsquery AS "false";
1078 false
1079-------
1080 f
1081(1 row)
1082
1083SELECT 'a:1 b:3'::tsvector @@ 'a <-> b'::tsquery AS "false";
1084 false
1085-------
1086 f
1087(1 row)
1088
1089SELECT 'a:1 b:3'::tsvector @@ 'a <0> b'::tsquery AS "false";
1090 false
1091-------
1092 f
1093(1 row)
1094
1095SELECT 'a:1 b:3'::tsvector @@ 'a <1> b'::tsquery AS "false";
1096 false
1097-------
1098 f
1099(1 row)
1100
1101SELECT 'a:1 b:3'::tsvector @@ 'a <2> b'::tsquery AS "true";
1102 true
1103------
1104 t
1105(1 row)
1106
1107SELECT 'a:1 b:3'::tsvector @@ 'a <3> b'::tsquery AS "false";
1108 false
1109-------
1110 f
1111(1 row)
1112
1113SELECT 'a:1 b:3'::tsvector @@ 'a <0> a:*'::tsquery AS "true";
1114 true
1115------
1116 t
1117(1 row)
1118
1119-- tsvector editing operations
1120SELECT strip('w:12B w:13* w:12,5,6 a:1,3* a:3 w asd:1dc asd'::tsvector);
1121     strip
1122---------------
1123 'a' 'asd' 'w'
1124(1 row)
1125
1126SELECT strip('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector);
1127                    strip
1128----------------------------------------------
1129 'base' 'hidden' 'rebel' 'spaceship' 'strike'
1130(1 row)
1131
1132SELECT strip('base hidden rebel spaceship strike'::tsvector);
1133                    strip
1134----------------------------------------------
1135 'base' 'hidden' 'rebel' 'spaceship' 'strike'
1136(1 row)
1137
1138SELECT ts_delete(to_tsvector('english', 'Rebel spaceships, striking from a hidden base'), 'spaceship');
1139                ts_delete
1140------------------------------------------
1141 'base':7 'hidden':6 'rebel':1 'strike':3
1142(1 row)
1143
1144SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, 'base');
1145                          ts_delete
1146--------------------------------------------------------------
1147 'hidden':6 'rebel':1 'spaceship':2,33A,34B,35C,36 'strike':3
1148(1 row)
1149
1150SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, 'bas');
1151                               ts_delete
1152-----------------------------------------------------------------------
1153 'base':7 'hidden':6 'rebel':1 'spaceship':2,33A,34B,35C,36 'strike':3
1154(1 row)
1155
1156SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, 'bases');
1157                               ts_delete
1158-----------------------------------------------------------------------
1159 'base':7 'hidden':6 'rebel':1 'spaceship':2,33A,34B,35C,36 'strike':3
1160(1 row)
1161
1162SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, 'spaceship');
1163                ts_delete
1164------------------------------------------
1165 'base':7 'hidden':6 'rebel':1 'strike':3
1166(1 row)
1167
1168SELECT ts_delete('base hidden rebel spaceship strike'::tsvector, 'spaceship');
1169            ts_delete
1170----------------------------------
1171 'base' 'hidden' 'rebel' 'strike'
1172(1 row)
1173
1174SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, ARRAY['spaceship','rebel']);
1175           ts_delete
1176--------------------------------
1177 'base':7 'hidden':6 'strike':3
1178(1 row)
1179
1180SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, ARRAY['spaceships','rebel']);
1181                          ts_delete
1182-------------------------------------------------------------
1183 'base':7 'hidden':6 'spaceship':2,33A,34B,35C,36 'strike':3
1184(1 row)
1185
1186SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, ARRAY['spaceshi','rebel']);
1187                          ts_delete
1188-------------------------------------------------------------
1189 'base':7 'hidden':6 'spaceship':2,33A,34B,35C,36 'strike':3
1190(1 row)
1191
1192SELECT ts_delete('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector, ARRAY['spaceship','leya','rebel']);
1193           ts_delete
1194--------------------------------
1195 'base':7 'hidden':6 'strike':3
1196(1 row)
1197
1198SELECT ts_delete('base hidden rebel spaceship strike'::tsvector, ARRAY['spaceship','leya','rebel']);
1199        ts_delete
1200--------------------------
1201 'base' 'hidden' 'strike'
1202(1 row)
1203
1204SELECT ts_delete('base hidden rebel spaceship strike'::tsvector, ARRAY['spaceship','leya','rebel','rebel']);
1205        ts_delete
1206--------------------------
1207 'base' 'hidden' 'strike'
1208(1 row)
1209
1210SELECT ts_delete('base hidden rebel spaceship strike'::tsvector, ARRAY['spaceship','leya','rebel', NULL]);
1211ERROR:  lexeme array may not contain nulls
1212SELECT unnest('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector);
1213                   unnest
1214---------------------------------------------
1215 (base,{7},{D})
1216 (hidden,{6},{D})
1217 (rebel,{1},{D})
1218 (spaceship,"{2,33,34,35,36}","{D,A,B,C,D}")
1219 (strike,{3},{D})
1220(5 rows)
1221
1222SELECT unnest('base hidden rebel spaceship strike'::tsvector);
1223    unnest
1224---------------
1225 (base,,)
1226 (hidden,,)
1227 (rebel,,)
1228 (spaceship,,)
1229 (strike,,)
1230(5 rows)
1231
1232SELECT * FROM unnest('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector);
1233  lexeme   |    positions    |   weights
1234-----------+-----------------+-------------
1235 base      | {7}             | {D}
1236 hidden    | {6}             | {D}
1237 rebel     | {1}             | {D}
1238 spaceship | {2,33,34,35,36} | {D,A,B,C,D}
1239 strike    | {3}             | {D}
1240(5 rows)
1241
1242SELECT * FROM unnest('base hidden rebel spaceship strike'::tsvector);
1243  lexeme   | positions | weights
1244-----------+-----------+---------
1245 base      |           |
1246 hidden    |           |
1247 rebel     |           |
1248 spaceship |           |
1249 strike    |           |
1250(5 rows)
1251
1252SELECT lexeme, positions[1] from unnest('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector);
1253  lexeme   | positions
1254-----------+-----------
1255 base      |         7
1256 hidden    |         6
1257 rebel     |         1
1258 spaceship |         2
1259 strike    |         3
1260(5 rows)
1261
1262SELECT tsvector_to_array('base:7 hidden:6 rebel:1 spaceship:2,33A,34B,35C,36D strike:3'::tsvector);
1263          tsvector_to_array
1264--------------------------------------
1265 {base,hidden,rebel,spaceship,strike}
1266(1 row)
1267
1268SELECT tsvector_to_array('base hidden rebel spaceship strike'::tsvector);
1269          tsvector_to_array
1270--------------------------------------
1271 {base,hidden,rebel,spaceship,strike}
1272(1 row)
1273
1274SELECT array_to_tsvector(ARRAY['base','hidden','rebel','spaceship','strike']);
1275              array_to_tsvector
1276----------------------------------------------
1277 'base' 'hidden' 'rebel' 'spaceship' 'strike'
1278(1 row)
1279
1280SELECT array_to_tsvector(ARRAY['base','hidden','rebel','spaceship', NULL]);
1281ERROR:  lexeme array may not contain nulls
1282-- array_to_tsvector must sort and de-dup
1283SELECT array_to_tsvector(ARRAY['foo','bar','baz','bar']);
1284 array_to_tsvector
1285-------------------
1286 'bar' 'baz' 'foo'
1287(1 row)
1288
1289SELECT setweight('w:12B w:13* w:12,5,6 a:1,3* a:3 w asd:1dc asd zxc:81,567,222A'::tsvector, 'c');
1290                        setweight
1291----------------------------------------------------------
1292 'a':1C,3C 'asd':1C 'w':5C,6C,12C,13C 'zxc':81C,222C,567C
1293(1 row)
1294
1295SELECT setweight('a:1,3A asd:1C w:5,6,12B,13A zxc:81,222A,567'::tsvector, 'c');
1296                        setweight
1297----------------------------------------------------------
1298 'a':1C,3C 'asd':1C 'w':5C,6C,12C,13C 'zxc':81C,222C,567C
1299(1 row)
1300
1301SELECT setweight('a:1,3A asd:1C w:5,6,12B,13A zxc:81,222A,567'::tsvector, 'c', '{a}');
1302                      setweight
1303------------------------------------------------------
1304 'a':1C,3C 'asd':1C 'w':5,6,12B,13A 'zxc':81,222A,567
1305(1 row)
1306
1307SELECT setweight('a:1,3A asd:1C w:5,6,12B,13A zxc:81,222A,567'::tsvector, 'c', '{a}');
1308                      setweight
1309------------------------------------------------------
1310 'a':1C,3C 'asd':1C 'w':5,6,12B,13A 'zxc':81,222A,567
1311(1 row)
1312
1313SELECT setweight('a:1,3A asd:1C w:5,6,12B,13A zxc:81,222A,567'::tsvector, 'c', '{a,zxc}');
1314                       setweight
1315--------------------------------------------------------
1316 'a':1C,3C 'asd':1C 'w':5,6,12B,13A 'zxc':81C,222C,567C
1317(1 row)
1318
1319SELECT setweight('a asd w:5,6,12B,13A zxc'::tsvector, 'c', '{a,zxc}');
1320            setweight
1321---------------------------------
1322 'a' 'asd' 'w':5,6,12B,13A 'zxc'
1323(1 row)
1324
1325SELECT setweight('a asd w:5,6,12B,13A zxc'::tsvector, 'c', ARRAY['a', 'zxc', NULL]);
1326ERROR:  lexeme array may not contain nulls
1327SELECT ts_filter('base:7A empir:17 evil:15 first:11 galact:16 hidden:6A rebel:1A spaceship:2A strike:3A victori:12 won:9'::tsvector, '{a}');
1328                          ts_filter
1329-------------------------------------------------------------
1330 'base':7A 'hidden':6A 'rebel':1A 'spaceship':2A 'strike':3A
1331(1 row)
1332
1333SELECT ts_filter('base hidden rebel spaceship strike'::tsvector, '{a}');
1334 ts_filter
1335-----------
1336
1337(1 row)
1338
1339SELECT ts_filter('base hidden rebel spaceship strike'::tsvector, '{a,b,NULL}');
1340ERROR:  weight array may not contain nulls
1341