2007-08-21 03:11:32 +02:00
|
|
|
--
|
|
|
|
-- Sanity checks for text search catalogs
|
|
|
|
--
|
|
|
|
-- NB: we assume the oidjoins test will have caught any dangling links,
|
|
|
|
-- that is OID or REGPROC fields that are not zero and do not match some
|
|
|
|
-- row in the linked-to table. However, if we want to enforce that a link
|
|
|
|
-- field can't be 0, we have to check it here.
|
|
|
|
|
|
|
|
-- Find unexpected zero link entries
|
|
|
|
|
|
|
|
SELECT oid, prsname
|
|
|
|
FROM pg_ts_parser
|
|
|
|
WHERE prsnamespace = 0 OR prsstart = 0 OR prstoken = 0 OR prsend = 0 OR
|
|
|
|
-- prsheadline is optional
|
|
|
|
prslextype = 0;
|
|
|
|
|
|
|
|
SELECT oid, dictname
|
|
|
|
FROM pg_ts_dict
|
|
|
|
WHERE dictnamespace = 0 OR dictowner = 0 OR dicttemplate = 0;
|
|
|
|
|
|
|
|
SELECT oid, tmplname
|
|
|
|
FROM pg_ts_template
|
|
|
|
WHERE tmplnamespace = 0 OR tmpllexize = 0; -- tmplinit is optional
|
|
|
|
|
|
|
|
SELECT oid, cfgname
|
|
|
|
FROM pg_ts_config
|
|
|
|
WHERE cfgnamespace = 0 OR cfgowner = 0 OR cfgparser = 0;
|
|
|
|
|
|
|
|
SELECT mapcfg, maptokentype, mapseqno
|
|
|
|
FROM pg_ts_config_map
|
|
|
|
WHERE mapcfg = 0 OR mapdict = 0;
|
|
|
|
|
|
|
|
-- Look for pg_ts_config_map entries that aren't one of parser's token types
|
|
|
|
SELECT * FROM
|
|
|
|
( SELECT oid AS cfgid, (ts_token_type(cfgparser)).tokid AS tokid
|
2010-11-23 21:27:50 +01:00
|
|
|
FROM pg_ts_config ) AS tt
|
2007-08-21 03:11:32 +02:00
|
|
|
RIGHT JOIN pg_ts_config_map AS m
|
|
|
|
ON (tt.cfgid=m.mapcfg AND tt.tokid=m.maptokentype)
|
|
|
|
WHERE
|
|
|
|
tt.cfgid IS NULL OR tt.tokid IS NULL;
|
|
|
|
|
|
|
|
-- test basic text search behavior without indexes, then with
|
|
|
|
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
|
2008-05-16 18:31:02 +02:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
create index wowidx on test_tsvector using gist (a);
|
|
|
|
|
|
|
|
SET enable_seqscan=OFF;
|
|
|
|
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
|
2008-05-16 18:31:02 +02:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
|
2011-12-21 01:57:34 +01:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
RESET enable_seqscan;
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
DROP INDEX wowidx;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
CREATE INDEX wowidx ON test_tsvector USING gin (a);
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
SET enable_seqscan=OFF;
|
|
|
|
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'wr&qh';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)';
|
2008-05-16 18:31:02 +02:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*';
|
2011-12-21 01:57:34 +01:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ any ('{wr,qh}');
|
2010-11-23 21:27:50 +01:00
|
|
|
|
2007-08-21 03:11:32 +02:00
|
|
|
RESET enable_seqscan;
|
2007-08-21 17:41:13 +02:00
|
|
|
INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH');
|
|
|
|
SELECT * FROM ts_stat('SELECT a FROM test_tsvector') ORDER BY ndoc DESC, nentry DESC, word LIMIT 10;
|
|
|
|
SELECT * FROM ts_stat('SELECT a FROM test_tsvector', 'AB') ORDER BY ndoc DESC, nentry DESC, word;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
--dictionaries and to_tsvector
|
|
|
|
|
2007-08-25 03:06:25 +02:00
|
|
|
SELECT ts_lexize('english_stem', 'skies');
|
|
|
|
SELECT ts_lexize('english_stem', 'identity');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT * FROM ts_token_type('default');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2016-03-29 16:59:58 +02:00
|
|
|
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>">
|
2007-08-21 03:11:32 +02:00
|
|
|
/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
|
|
|
|
<i <b> wow < jqw <> qwerty');
|
|
|
|
|
2016-03-29 16:59:58 +02:00
|
|
|
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>">
|
2007-08-21 03:11:32 +02:00
|
|
|
/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
|
|
|
|
<i <b> wow < jqw <> qwerty');
|
|
|
|
|
2016-03-29 16:59:58 +02:00
|
|
|
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>">
|
2007-08-21 03:11:32 +02:00
|
|
|
/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
|
|
|
|
<i <b> wow < jqw <> qwerty'));
|
|
|
|
|
2007-11-25 16:37:11 +01:00
|
|
|
-- ts_debug
|
|
|
|
|
2008-01-13 22:17:46 +01:00
|
|
|
SELECT * from ts_debug('english', '<myns:foo-bar_baz.blurfl>abc&nm1;def©ghiõjkl</myns:foo-bar_baz.blurfl>');
|
2007-11-25 16:37:11 +01:00
|
|
|
|
Modify the built-in text search parser to handle URLs more nearly according
to RFC 3986. In particular, these characters now terminate the path part
of a URL: '"', '<', '>', '\', '^', '`', '{', '|', '}'. The previous behavior
was inconsistent and depended on whether a "?" was present in the path.
Per gripe from Donald Fraser and spec research by Kevin Grittner.
This is a pre-existing bug, but not back-patching since the risks of
breaking existing applications seem to outweigh the benefits.
2010-04-28 04:04:16 +02:00
|
|
|
-- check parsing of URLs
|
|
|
|
SELECT * from ts_debug('english', 'http://www.harewoodsolutions.co.uk/press.aspx</span>');
|
|
|
|
SELECT * from ts_debug('english', 'http://aew.wer0c.ewr/id?ad=qwe&dw<span>');
|
|
|
|
SELECT * from ts_debug('english', 'http://5aew.werc.ewr:8100/?');
|
|
|
|
SELECT * from ts_debug('english', '5aew.werc.ewr:8100/?xx');
|
|
|
|
|
2007-08-21 03:11:32 +02:00
|
|
|
-- to_tsquery
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT to_tsquery('english', 'qwe & sKies ');
|
|
|
|
SELECT to_tsquery('simple', 'qwe & sKies ');
|
|
|
|
SELECT to_tsquery('english', '''the wether'':dc & '' sKies '':BC ');
|
|
|
|
SELECT to_tsquery('english', 'asd&(and|fghj)');
|
|
|
|
SELECT to_tsquery('english', '(asd&and)|fghj');
|
|
|
|
SELECT to_tsquery('english', '(asd&!and)|fghj');
|
|
|
|
SELECT to_tsquery('english', '(the|and&(i&1))&fghj');
|
|
|
|
|
|
|
|
SELECT plainto_tsquery('english', 'the and z 1))& fghj');
|
|
|
|
SELECT plainto_tsquery('english', 'foo bar') && plainto_tsquery('english', 'asd');
|
|
|
|
SELECT plainto_tsquery('english', 'foo bar') || plainto_tsquery('english', 'asd fg');
|
|
|
|
SELECT plainto_tsquery('english', 'foo bar') || !!plainto_tsquery('english', 'asd fg');
|
|
|
|
SELECT plainto_tsquery('english', 'foo bar') && 'asd | fg';
|
|
|
|
|
2016-04-07 17:44:18 +02:00
|
|
|
-- Check stop word deletion, a and s are stop-words
|
|
|
|
SELECT to_tsquery('english', '(1 <-> 2) <-> a');
|
|
|
|
SELECT to_tsquery('english', '(1 <-> a) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '(a <-> 1) <-> 2');
|
|
|
|
SELECT to_tsquery('english', 'a <-> (1 <-> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <-> (a <-> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <-> (2 <-> a)');
|
|
|
|
|
|
|
|
SELECT to_tsquery('english', '(1 <-> 2) <3> a');
|
|
|
|
SELECT to_tsquery('english', '(1 <-> a) <3> 2');
|
|
|
|
SELECT to_tsquery('english', '(a <-> 1) <3> 2');
|
|
|
|
SELECT to_tsquery('english', 'a <3> (1 <-> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <3> (a <-> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <3> (2 <-> a)');
|
|
|
|
|
|
|
|
SELECT to_tsquery('english', '(1 <3> 2) <-> a');
|
|
|
|
SELECT to_tsquery('english', '(1 <3> a) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '(a <3> 1) <-> 2');
|
|
|
|
SELECT to_tsquery('english', 'a <-> (1 <3> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <-> (a <3> 2)');
|
|
|
|
SELECT to_tsquery('english', '1 <-> (2 <3> a)');
|
|
|
|
|
|
|
|
SELECT to_tsquery('english', '((a <-> 1) <-> 2) <-> s');
|
|
|
|
SELECT to_tsquery('english', '(2 <-> (a <-> 1)) <-> s');
|
|
|
|
SELECT to_tsquery('english', '((1 <-> a) <-> 2) <-> s');
|
|
|
|
SELECT to_tsquery('english', '(2 <-> (1 <-> a)) <-> s');
|
|
|
|
SELECT to_tsquery('english', 's <-> ((a <-> 1) <-> 2)');
|
|
|
|
SELECT to_tsquery('english', 's <-> (2 <-> (a <-> 1))');
|
|
|
|
SELECT to_tsquery('english', 's <-> ((1 <-> a) <-> 2)');
|
|
|
|
SELECT to_tsquery('english', 's <-> (2 <-> (1 <-> a))');
|
|
|
|
|
|
|
|
SELECT to_tsquery('english', '((a <-> 1) <-> s) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '(s <-> (a <-> 1)) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '((1 <-> a) <-> s) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '(s <-> (1 <-> a)) <-> 2');
|
|
|
|
SELECT to_tsquery('english', '2 <-> ((a <-> 1) <-> s)');
|
|
|
|
SELECT to_tsquery('english', '2 <-> (s <-> (a <-> 1))');
|
|
|
|
SELECT to_tsquery('english', '2 <-> ((1 <-> a) <-> s)');
|
|
|
|
SELECT to_tsquery('english', '2 <-> (s <-> (1 <-> a))');
|
|
|
|
|
2016-04-07 18:28:31 +02:00
|
|
|
SELECT to_tsquery('english', 'foo <-> (a <-> (the <-> bar))');
|
|
|
|
SELECT to_tsquery('english', '((foo <-> a) <-> the) <-> bar');
|
|
|
|
SELECT to_tsquery('english', 'foo <-> a <-> the <-> bar');
|
|
|
|
SELECT phraseto_tsquery('english', 'PostgreSQL can be extended by the user in many ways');
|
2016-04-07 17:44:18 +02:00
|
|
|
|
|
|
|
|
2007-12-09 22:01:18 +01:00
|
|
|
SELECT ts_rank_cd(to_tsvector('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
'), to_tsquery('english', 'paint&water'));
|
|
|
|
|
|
|
|
SELECT ts_rank_cd(to_tsvector('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
'), to_tsquery('english', 'breath&motion&water'));
|
|
|
|
|
|
|
|
SELECT ts_rank_cd(to_tsvector('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
'), to_tsquery('english', 'ocean'));
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2016-04-07 17:44:18 +02:00
|
|
|
SELECT ts_rank_cd(to_tsvector('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
'), to_tsquery('english', 'painted <-> Ship'));
|
|
|
|
|
2014-03-24 19:36:36 +01:00
|
|
|
SELECT ts_rank_cd(strip(to_tsvector('both stripped')),
|
|
|
|
to_tsquery('both & stripped'));
|
|
|
|
|
|
|
|
SELECT ts_rank_cd(to_tsvector('unstripped') || strip(to_tsvector('stripped')),
|
|
|
|
to_tsquery('unstripped & stripped'));
|
|
|
|
|
2007-08-21 03:11:32 +02:00
|
|
|
--headline tests
|
2007-12-09 22:01:18 +01:00
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
', to_tsquery('english', 'paint&water'));
|
|
|
|
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
', to_tsquery('english', 'breath&motion&water'));
|
|
|
|
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
2007-12-10 01:12:31 +01:00
|
|
|
S. T. Coleridge (1772-1834)
|
2007-12-09 22:01:18 +01:00
|
|
|
', to_tsquery('english', 'ocean'));
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2016-04-07 17:44:18 +02:00
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', phraseto_tsquery('english', 'painted Ocean'));
|
|
|
|
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', phraseto_tsquery('english', 'idle as a painted Ship'));
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT ts_headline('english', '
|
2007-08-21 03:11:32 +02:00
|
|
|
<html>
|
|
|
|
<!-- some comment -->
|
|
|
|
<body>
|
|
|
|
Sea view wow <u>foo bar</u> <i>qq</i>
|
|
|
|
<a href="http://www.google.com/foo.bar.html" target="_blank">YES </a>
|
|
|
|
ff-bg
|
|
|
|
<script>
|
|
|
|
document.write(15);
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>',
|
|
|
|
to_tsquery('english', 'sea&foo'), 'HighlightAll=true');
|
|
|
|
|
2016-04-07 17:44:18 +02:00
|
|
|
SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 <-> 3', 'MaxWords=2, MinWords=1');
|
|
|
|
SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 & 3', 'MaxWords=4, MinWords=1');
|
|
|
|
SELECT ts_headline('simple', '1 2 3 1 3'::text, '1 <-> 3', 'MaxWords=4, MinWords=1');
|
|
|
|
|
2010-11-23 21:27:50 +01:00
|
|
|
--Check if headline fragments work
|
2008-10-17 20:05:19 +02:00
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', to_tsquery('english', 'ocean'), 'MaxFragments=1');
|
|
|
|
|
|
|
|
--Check if more than one fragments are displayed
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2');
|
|
|
|
|
|
|
|
--Fragments when there all query words are not in the document
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', to_tsquery('english', 'ocean & seahorse'), 'MaxFragments=1');
|
|
|
|
|
|
|
|
--FragmentDelimiter option
|
|
|
|
SELECT ts_headline('english', '
|
|
|
|
Day after day, day after day,
|
|
|
|
We stuck, nor breath nor motion,
|
|
|
|
As idle as a painted Ship
|
|
|
|
Upon a painted Ocean.
|
|
|
|
Water, water, every where
|
|
|
|
And all the boards did shrink;
|
|
|
|
Water, water, every where,
|
|
|
|
Nor any drop to drink.
|
|
|
|
S. T. Coleridge (1772-1834)
|
|
|
|
', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2,FragmentDelimiter=***');
|
|
|
|
|
2007-08-21 03:11:32 +02:00
|
|
|
--Rewrite sub system
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
CREATE TABLE test_tsquery (txtkeyword TEXT, txtsample TEXT);
|
2007-08-21 03:11:32 +02:00
|
|
|
\set ECHO none
|
|
|
|
\copy test_tsquery from stdin
|
|
|
|
'New York' new & york | big & apple | nyc
|
|
|
|
Moscow moskva | moscow
|
|
|
|
'Sanct Peter' Peterburg | peter | 'Sanct Peterburg'
|
|
|
|
'foo bar qq' foo & (bar | qq) & city
|
2016-04-07 17:44:18 +02:00
|
|
|
1 & (2 <-> 3) 2 <-> 4
|
|
|
|
5 <-> 6 5 <-> 7
|
2007-08-21 03:11:32 +02:00
|
|
|
\.
|
|
|
|
\set ECHO all
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
ALTER TABLE test_tsquery ADD COLUMN keyword tsquery;
|
|
|
|
UPDATE test_tsquery SET keyword = to_tsquery('english', txtkeyword);
|
|
|
|
ALTER TABLE test_tsquery ADD COLUMN sample tsquery;
|
|
|
|
UPDATE test_tsquery SET sample = to_tsquery('english', txtsample::text);
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword < 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword > 'new & york';
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
CREATE UNIQUE INDEX bt_tsq ON test_tsquery (keyword);
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
SET enable_seqscan=OFF;
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword < 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword <= 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword = 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword >= 'new & york';
|
|
|
|
SELECT COUNT(*) FROM test_tsquery WHERE keyword > 'new & york';
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
RESET enable_seqscan;
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT ts_rewrite('foo & bar & qq & new & york', 'new & york'::tsquery, 'big & apple | nyc | new & york & city');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
|
|
|
|
SELECT ts_rewrite('moscow & hotel', 'SELECT keyword, sample FROM test_tsquery'::text );
|
2007-10-24 04:24:49 +02:00
|
|
|
SELECT ts_rewrite('bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery'::text );
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-10-24 04:24:49 +02:00
|
|
|
SELECT ts_rewrite( 'moscow', 'SELECT keyword, sample FROM test_tsquery');
|
|
|
|
SELECT ts_rewrite( 'moscow & hotel', 'SELECT keyword, sample FROM test_tsquery');
|
|
|
|
SELECT ts_rewrite( 'bar & new & qq & foo & york', 'SELECT keyword, sample FROM test_tsquery');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2016-04-07 17:44:18 +02:00
|
|
|
SELECT ts_rewrite('1 & (2 <-> 3)', 'SELECT keyword, sample FROM test_tsquery'::text );
|
|
|
|
SELECT ts_rewrite('1 & (2 <2> 3)', 'SELECT keyword, sample FROM test_tsquery'::text );
|
|
|
|
SELECT ts_rewrite('5 <-> (1 & (2 <-> 3))', 'SELECT keyword, sample FROM test_tsquery'::text );
|
|
|
|
SELECT ts_rewrite('5 <-> (6 | 8)', 'SELECT keyword, sample FROM test_tsquery'::text );
|
|
|
|
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
|
2007-10-24 04:24:49 +02:00
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
CREATE INDEX qq ON test_tsquery USING gist (keyword tsquery_ops);
|
2007-08-21 03:11:32 +02:00
|
|
|
SET enable_seqscan=OFF;
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword @> 'new';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword @> 'moscow';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword <@ 'new';
|
|
|
|
SELECT keyword FROM test_tsquery WHERE keyword <@ 'moscow';
|
2007-10-24 04:24:49 +02:00
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'moscow & hotel') AS query;
|
|
|
|
SELECT ts_rewrite( query, 'SELECT keyword, sample FROM test_tsquery' ) FROM to_tsquery('english', 'bar & new & qq & foo & york') AS query;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
RESET enable_seqscan;
|
|
|
|
|
|
|
|
--test GUC
|
2007-08-21 17:41:13 +02:00
|
|
|
SET default_text_search_config=simple;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT to_tsvector('SKIES My booKs');
|
|
|
|
SELECT plainto_tsquery('SKIES My booKs');
|
|
|
|
SELECT to_tsquery('SKIES & My | booKs');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SET default_text_search_config=english;
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT to_tsvector('SKIES My booKs');
|
|
|
|
SELECT plainto_tsquery('SKIES My booKs');
|
|
|
|
SELECT to_tsquery('SKIES & My | booKs');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
|
|
|
--trigger
|
|
|
|
CREATE TRIGGER tsvectorupdate
|
|
|
|
BEFORE UPDATE OR INSERT ON test_tsvector
|
|
|
|
FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(a, 'pg_catalog.english', t);
|
|
|
|
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
|
|
|
|
INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
|
|
|
|
UPDATE test_tsvector SET t = null WHERE t = '345 qwerty';
|
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
|
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
INSERT INTO test_tsvector (t) VALUES ('345 qwerty');
|
2007-08-21 03:11:32 +02:00
|
|
|
|
2007-08-21 17:41:13 +02:00
|
|
|
SELECT count(*) FROM test_tsvector WHERE a @@ to_tsquery('345&qwerty');
|
2009-05-19 04:48:26 +02:00
|
|
|
|
|
|
|
-- test finding items in GIN's pending list
|
|
|
|
create temp table pendtest (ts tsvector);
|
|
|
|
create index pendtest_idx on pendtest using gin(ts);
|
|
|
|
insert into pendtest values (to_tsvector('Lore ipsam'));
|
|
|
|
insert into pendtest values (to_tsvector('Lore ipsum'));
|
|
|
|
select * from pendtest where 'ipsu:*'::tsquery @@ ts;
|
|
|
|
select * from pendtest where 'ipsa:*'::tsquery @@ ts;
|
|
|
|
select * from pendtest where 'ips:*'::tsquery @@ ts;
|
|
|
|
select * from pendtest where 'ipt:*'::tsquery @@ ts;
|
|
|
|
select * from pendtest where 'ipi:*'::tsquery @@ ts;
|
2016-04-07 17:44:18 +02:00
|
|
|
|
|
|
|
--check OP_PHRASE on index
|
|
|
|
create temp table phrase_index_test(fts tsvector);
|
|
|
|
insert into phrase_index_test values('A fat cat has just eaten a rat.');
|
|
|
|
create index phrase_index_test_idx on phrase_index_test using gin(fts);
|
|
|
|
set enable_seqscan = off;
|
2016-04-07 18:28:31 +02:00
|
|
|
select * from phrase_index_test where fts @@ phraseto_tsquery('english', 'fat cat');
|
2016-04-07 17:44:18 +02:00
|
|
|
set enable_seqscan = on;
|