@@ -98,8 +98,108 @@ SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
98
98
494
99
99
(1 row)
100
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
+
101
119
create index wowidx on test_tsvector using gist (a);
102
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
+
103
203
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
104
204
count
105
205
-------
@@ -148,10 +248,35 @@ SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
148
248
158
149
249
(1 row)
150
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
+
151
263
RESET enable_seqscan;
264
+ RESET enable_indexscan;
265
+ RESET enable_bitmapscan;
152
266
DROP INDEX wowidx;
153
267
CREATE INDEX wowidx ON test_tsvector USING gin (a);
154
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
+
155
280
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
156
281
count
157
282
-------
@@ -200,6 +325,18 @@ SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
200
325
158
201
326
(1 row)
202
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
+
203
340
RESET enable_seqscan;
204
341
INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
205
342
SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;