2
-- Sanity checks for text search catalogs
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.
9
-- Find unexpected zero link entries
13
WHERE prsnamespace = 0 OR prsstart = 0 OR prstoken = 0 OR prsend = 0 OR
14
-- prsheadline is optional
19
WHERE dictnamespace = 0 OR dictowner = 0 OR dicttemplate = 0;
23
WHERE tmplnamespace = 0 OR tmpllexize = 0; -- tmplinit is optional
27
WHERE cfgnamespace = 0 OR cfgowner = 0 OR cfgparser = 0;
29
SELECT mapcfg, maptokentype, mapseqno
31
WHERE mapcfg = 0 OR mapdict = 0;
33
-- Look for pg_ts_config_map entries that aren't one of parser's token types
35
( SELECT oid AS cfgid, (ts_token_type(cfgparser)).tokid AS tokid
36
FROM pg_ts_config ) AS tt
37
RIGHT JOIN pg_ts_config_map AS m
38
ON (tt.cfgid=m.mapcfg AND tt.tokid=m.maptokentype)
40
tt.cfgid IS NULL OR tt.tokid IS NULL;
42
-- test basic text search behavior without indexes, then with
44
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
45
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
46
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
47
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
48
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
49
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
50
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
52
create index wowidx on test_tsvector using gist (a);
54
SET enable_seqscan=OFF;
56
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
57
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
58
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
59
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
60
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
61
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
62
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
68
CREATE INDEX wowidx ON test_tsvector USING gin (a);
70
SET enable_seqscan=OFF;
72
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
73
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
74
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
75
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
76
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
77
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
78
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
81
INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
82
SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;
83
SELECT * FROM ts_stat('SELECT a FROM test_tsvector', 'AB') ORDER BY ndoc DESC, nentry DESC, word;
85
--dictionaries and to_tsvector
87
SELECT ts_lexize('english_stem', 'skies');
88
SELECT ts_lexize('english_stem', 'identity');
90
SELECT * FROM ts_token_type('default');
92
SELECT * FROM ts_parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
93
/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
94
<i <b> wow < jqw <> qwerty');
96
SELECT to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
97
/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
98
<i <b> wow < jqw <> qwerty');
100
SELECT length(to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>">
101
/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
102
<i <b> wow < jqw <> qwerty'));
106
SELECT * from ts_debug('english', '<myns:foo-bar_baz.blurfl>abc&nm1;def©ghiõjkl</myns:foo-bar_baz.blurfl>');
110
SELECT to_tsquery('english', 'qwe & sKies ');
111
SELECT to_tsquery('simple', 'qwe & sKies ');
112
SELECT to_tsquery('english', '''the wether'':dc & '' sKies '':BC ');
113
SELECT to_tsquery('english', 'asd&(and|fghj)');
114
SELECT to_tsquery('english', '(asd&and)|fghj');
115
SELECT to_tsquery('english', '(asd&!and)|fghj');
116
SELECT to_tsquery('english', '(the|and&(i&1))&fghj');
118
SELECT plainto_tsquery('english', 'the and z 1))& fghj');
119
SELECT plainto_tsquery('english', 'foo bar') && plainto_tsquery('english', 'asd');
120
SELECT plainto_tsquery('english', 'foo bar') || plainto_tsquery('english', 'asd fg');
121
SELECT plainto_tsquery('english', 'foo bar') || !!plainto_tsquery('english', 'asd fg');
122
SELECT plainto_tsquery('english', 'foo bar') && 'asd | fg';
124
SELECT ts_rank_cd(to_tsvector('english', '
125
Day after day, day after day,
126
We stuck, nor breath nor motion,
127
As idle as a painted Ship
128
Upon a painted Ocean.
129
Water, water, every where
130
And all the boards did shrink;
131
Water, water, every where,
132
Nor any drop to drink.
133
S. T. Coleridge (1772-1834)
134
'), to_tsquery('english', 'paint&water'));
136
SELECT ts_rank_cd(to_tsvector('english', '
137
Day after day, day after day,
138
We stuck, nor breath nor motion,
139
As idle as a painted Ship
140
Upon a painted Ocean.
141
Water, water, every where
142
And all the boards did shrink;
143
Water, water, every where,
144
Nor any drop to drink.
145
S. T. Coleridge (1772-1834)
146
'), to_tsquery('english', 'breath&motion&water'));
148
SELECT ts_rank_cd(to_tsvector('english', '
149
Day after day, day after day,
150
We stuck, nor breath nor motion,
151
As idle as a painted Ship
152
Upon a painted Ocean.
153
Water, water, every where
154
And all the boards did shrink;
155
Water, water, every where,
156
Nor any drop to drink.
157
S. T. Coleridge (1772-1834)
158
'), to_tsquery('english', 'ocean'));
161
SELECT ts_headline('english', '
162
Day after day, day after day,
163
We stuck, nor breath nor motion,
164
As idle as a painted Ship
165
Upon a painted Ocean.
166
Water, water, every where
167
And all the boards did shrink;
168
Water, water, every where,
169
Nor any drop to drink.
170
S. T. Coleridge (1772-1834)
171
', to_tsquery('english', 'paint&water'));
173
SELECT ts_headline('english', '
174
Day after day, day after day,
175
We stuck, nor breath nor motion,
176
As idle as a painted Ship
177
Upon a painted Ocean.
178
Water, water, every where
179
And all the boards did shrink;
180
Water, water, every where,
181
Nor any drop to drink.
182
S. T. Coleridge (1772-1834)
183
', to_tsquery('english', 'breath&motion&water'));
185
SELECT ts_headline('english', '
186
Day after day, day after day,
187
We stuck, nor breath nor motion,
188
As idle as a painted Ship
189
Upon a painted Ocean.
190
Water, water, every where
191
And all the boards did shrink;
192
Water, water, every where,
193
Nor any drop to drink.
194
S. T. Coleridge (1772-1834)
195
', to_tsquery('english', 'ocean'));
197
SELECT ts_headline('english', '
199
<!-- some comment -->
201
Sea view wow <u>foo bar</u> <i>qq</i>
202
<a href="http://www.google.com/foo.bar.html" target="_blank">YES </a>
209
to_tsquery('english', 'sea&foo'), 'HighlightAll=true');
211
--Check if headline fragments work
212
SELECT ts_headline('english', '
213
Day after day, day after day,
214
We stuck, nor breath nor motion,
215
As idle as a painted Ship
216
Upon a painted Ocean.
217
Water, water, every where
218
And all the boards did shrink;
219
Water, water, every where,
220
Nor any drop to drink.
221
S. T. Coleridge (1772-1834)
222
', to_tsquery('english', 'ocean'), 'MaxFragments=1');
224
--Check if more than one fragments are displayed
225
SELECT ts_headline('english', '
226
Day after day, day after day,
227
We stuck, nor breath nor motion,
228
As idle as a painted Ship
229
Upon a painted Ocean.
230
Water, water, every where
231
And all the boards did shrink;
232
Water, water, every where,
233
Nor any drop to drink.
234
S. T. Coleridge (1772-1834)
235
', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2');
237
--Fragments when there all query words are not in the document
238
SELECT ts_headline('english', '
239
Day after day, day after day,
240
We stuck, nor breath nor motion,
241
As idle as a painted Ship
242
Upon a painted Ocean.
243
Water, water, every where
244
And all the boards did shrink;
245
Water, water, every where,
246
Nor any drop to drink.
247
S. T. Coleridge (1772-1834)
248
', to_tsquery('english', 'ocean & seahorse'), 'MaxFragments=1');
250
--FragmentDelimiter option
251
SELECT ts_headline('english', '
252
Day after day, day after day,
253
We stuck, nor breath nor motion,
254
As idle as a painted Ship
255
Upon a painted Ocean.
256
Water, water, every where
257
And all the boards did shrink;
258
Water, water, every where,
259
Nor any drop to drink.
260
S. T. Coleridge (1772-1834)
261
', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2,FragmentDelimiter=***');
265
CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT);
267
\copy test_tsquery from stdin
268
'New York' new & york | big & apple | nyc
269
Moscow moskva | moscow
270
'Sanct Peter' Peterburg | peter | 'Sanct Peterburg'
271
'foo bar qq' foo & (bar | qq) & city
275
ALTER TABLE test_tsquery ADD COLUMN keyword tsquery;
276
UPDATE test_tsquery SET keyword = to_tsquery('english', txtkeyword);
277
ALTER TABLE test_tsquery ADD COLUMN sample tsquery;
278
UPDATE test_tsquery SET sample = to_tsquery('english', txtsample::text);
281
SELECT COUNT(*) FROM test_tsquery WHERE keyword < 'new & york';
282
SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
283
SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
284
SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
285
SELECT COUNT(*) FROM test_tsquery WHERE keyword > 'new & york';
287
CREATE UNIQUE INDEX bt_tsq ON test_tsquery (keyword);
289
SET enable_seqscan=OFF;
291
SELECT COUNT(*) FROM test_tsquery WHERE keyword < 'new & york';
292
SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
293
SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
294
SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
295
SELECT COUNT(*) FROM test_tsquery WHERE keyword > 'new & york';
297
RESET enable_seqscan;
299
SELECT ts_rewrite('foo & bar & qq & new & york', 'new & york'::tsquery, 'big & apple | nyc | new & york & city');
301
SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
302
SELECT ts_rewrite('moscow & hotel', 'SELECT keyword, sample FROM test_tsquery'::text );
303
SELECT ts_rewrite('bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery'::text );
305
SELECT ts_rewrite( 'moscow', 'SELECT keyword, sample FROM test_tsquery');
306
SELECT ts_rewrite( 'moscow & hotel', 'SELECT keyword, sample FROM test_tsquery');
307
SELECT ts_rewrite( 'bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery');
310
SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
311
SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
312
SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
313
SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
314
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
315
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
316
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
317
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
318
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
319
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
321
CREATE INDEX qq ON test_tsquery USING gist (keyword tsquery_ops);
322
SET enable_seqscan=OFF;
324
SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
325
SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
326
SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
327
SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
328
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
329
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
330
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
331
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
332
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
333
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
335
RESET enable_seqscan;
338
SET default_text_search_config=simple;
340
SELECT to_tsvector('SKIES My booKs');
341
SELECT plainto_tsquery('SKIES My booKs');
342
SELECT to_tsquery('SKIES & My | booKs');
344
SET default_text_search_config=english;
346
SELECT to_tsvector('SKIES My booKs');
347
SELECT plainto_tsquery('SKIES My booKs');
348
SELECT to_tsquery('SKIES & My | booKs');
351
CREATE TRIGGER tsvectorupdate
352
BEFORE UPDATE OR INSERT ON test_tsvector
353
FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(a, 'pg_catalog.english', t);
355
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
356
INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
357
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
358
UPDATE test_tsvector SET t = null WHERE t = '345 qwerty';
359
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
361
INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
363
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');