@@ -98,8 +98,108 @@ SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
9898 494
9999(1 row)
100100
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+
101119create index wowidx on test_tsvector using gist (a);
102120SET 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+
103203SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
104204 count
105205-------
@@ -148,10 +248,35 @@ SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
148248 158
149249(1 row)
150250
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+
151263RESET enable_seqscan;
264+ RESET enable_indexscan;
265+ RESET enable_bitmapscan;
152266DROP INDEX wowidx;
153267CREATE INDEX wowidx ON test_tsvector USING gin (a);
154268SET 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+
155280SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
156281 count
157282-------
@@ -200,6 +325,18 @@ SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
200325 158
201326(1 row)
202327
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+
203340RESET enable_seqscan;
204341INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
205342SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;