CREATE EXTENSION dict_xsyn;
-- default configuration - match first word and return it among with all synonyms
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=true, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=false);
--lexize
SELECT ts_lexize('xsyn', 'supernova');
        ts_lexize         
--------------------------
 {supernova,sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'sn');
 ts_lexize 
-----------
 
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- the same, but return only synonyms
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=false, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=false);
SELECT ts_lexize('xsyn', 'supernova');
   ts_lexize    
----------------
 {sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'sn');
 ts_lexize 
-----------
 
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- match any word and return all words
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=true, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=true);
SELECT ts_lexize('xsyn', 'supernova');
        ts_lexize         
--------------------------
 {supernova,sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'sn');
        ts_lexize         
--------------------------
 {supernova,sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- match any word and return all words except first one
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=false, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=true);
SELECT ts_lexize('xsyn', 'supernova');
   ts_lexize    
----------------
 {sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'sn');
   ts_lexize    
----------------
 {sn,sne,1987a}
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- match any synonym but not first word, and return first word instead
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=true, MATCHORIG=false, KEEPSYNONYMS=false, MATCHSYNONYMS=true);
SELECT ts_lexize('xsyn', 'supernova');
 ts_lexize 
-----------
 
(1 row)

SELECT ts_lexize('xsyn', 'sn');
  ts_lexize  
-------------
 {supernova}
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- do not match or return anything
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=false, MATCHORIG=false, KEEPSYNONYMS=false, MATCHSYNONYMS=false);
SELECT ts_lexize('xsyn', 'supernova');
 ts_lexize 
-----------
 
(1 row)

SELECT ts_lexize('xsyn', 'sn');
 ts_lexize 
-----------
 
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

-- match any word but return nothing
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=false, MATCHORIG=true, KEEPSYNONYMS=false, MATCHSYNONYMS=true);
SELECT ts_lexize('xsyn', 'supernova');
 ts_lexize 
-----------
 {}
(1 row)

SELECT ts_lexize('xsyn', 'sn');
 ts_lexize 
-----------
 {}
(1 row)

SELECT ts_lexize('xsyn', 'grb');
 ts_lexize 
-----------
 
(1 row)

