Thread: Avoiding empty queries in tsearch
I am having trouble with to_tsquery when the query is all stop words. Rather than return everything as a match, it returns nothing with the notice: NOTICE: Query contains only stopword(s) or doesn't contain lexem(s), ignored What is the best way to check for this, I was hoping to be able to check if the resulting tsquery was empty or null, but haven't found a way. Any advice? Thanks for your help, Doug
contrib_regression=# select numnode( plainto_tsquery('the any') ); NOTICE: query contains only stopword(s) or doesn't contain lexeme(s), ignored numnode --------- 0 (1 row) contrib_regression=# select numnode( plainto_tsquery('the table') ); numnode --------- 1 (1 row) contrib_regression=# select numnode( plainto_tsquery('long table') ); numnode --------- 3 (1 row) -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
That sounds perfect, but it doesn't seem to exist on either of the postgresql installations I have access to (8.1 on ubuntu and fedora core). Is it new to 8.2? Is there a similar function under 8.1, or at least a decent work-around? Thanks for the help, Doug On 1/15/07, Teodor Sigaev <teodor@sigaev.ru> wrote: > contrib_regression=# select numnode( plainto_tsquery('the any') ); > NOTICE: query contains only stopword(s) or doesn't contain lexeme(s), ignored > numnode > --------- > 0 > (1 row) > > contrib_regression=# select numnode( plainto_tsquery('the table') ); > numnode > --------- > 1 > (1 row) > > contrib_regression=# select numnode( plainto_tsquery('long table') ); > numnode > --------- > 3 > (1 row) > > > -- > Teodor Sigaev E-mail: teodor@sigaev.ru > WWW: http://www.sigaev.ru/
Doug Cole wrote: > That sounds perfect, but it doesn't seem to exist on either of the > postgresql installations I have access to (8.1 on ubuntu and fedora > core). Is it new to 8.2? Is there a similar function under 8.1, or at Yes, it's new in 8.2 > least a decent work-around? Thanks for the help, > Doug Not nice workaround but it works: # create or replace function isvoid(tsquery) returns bool as $$ select case when $1 is NULL then 't'::bool when length(textin(tsquery_out( $1 ))) = 0 then 't'::bool else 'f'::bool end; $$ language SQL called on null input; # select isvoid( plainto_tsquery('the & any') ); NOTICE: query contains only stopword(s) or doesn't contain lexeme(s), ignored isvoid -------- t (1 row) -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
Doug, numnode exists for sure ! It's plainto_tsquery function which Teodor used in example, appeared in 8.2 Oleg On Mon, 15 Jan 2007, Doug Cole wrote: > That sounds perfect, but it doesn't seem to exist on either of the > postgresql installations I have access to (8.1 on ubuntu and fedora > core). Is it new to 8.2? Is there a similar function under 8.1, or > at least a decent work-around? Thanks for the help, > Doug > > > > On 1/15/07, Teodor Sigaev <teodor@sigaev.ru> wrote: >> contrib_regression=# select numnode( plainto_tsquery('the any') ); >> NOTICE: query contains only stopword(s) or doesn't contain > lexeme(s), ignored >> numnode >> --------- >> 0 >> (1 row) >> >> contrib_regression=# select numnode( plainto_tsquery('the table') ); >> numnode >> --------- >> 1 >> (1 row) >> >> contrib_regression=# select numnode( plainto_tsquery('long table') ); >> numnode >> --------- >> 3 >> (1 row) >> >> >> -- >> Teodor Sigaev E-mail: teodor@sigaev.ru >> WWW: > http://www.sigaev.ru/ > > ---------------------------(end of broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings > Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83
That sounds perfect, but it doesn't seem to exist on either of the postgresql installations I have access to (8.1 on ubuntu and fedora core). Is it new to 8.2? Is there a similar function under 8.1, or at least a decent work-around? Thanks for the help,
Doug
Doug
On 1/15/07, Teodor Sigaev <teodor@sigaev.ru> wrote:
contrib_regression=# select numnode( plainto_tsquery('the any') );
NOTICE: query contains only stopword(s) or doesn't contain lexeme(s), ignored
numnode
---------
0
(1 row)
contrib_regression=# select numnode( plainto_tsquery('the table') );
numnode
---------
1
(1 row)
contrib_regression=# select numnode( plainto_tsquery('long table') );
numnode
---------
3
(1 row)
--
Teodor Sigaev E-mail: teodor@sigaev.ru
WWW: http://www.sigaev.ru/