Avoiding empty queries in tsearch

Started by Doug Coleover 19 years ago7 messagesgeneral
Jump to latest
#1Doug Cole
doug@shackprices.com

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

#2Doug Cole
dougcole@gmail.com
In reply to: Doug Cole (#1)

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

#3Teodor Sigaev
teodor@sigaev.ru
In reply to: Doug Cole (#1)
Re: Avoiding empty queries in tsearch

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/

#4Doug Cole
doug@shackprices.com
In reply to: Teodor Sigaev (#3)
Re: Avoiding empty queries in tsearch

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

Show quoted text

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/

#5Doug Cole
dougcole@gmail.com
In reply to: Doug Cole (#4)
Re: Avoiding empty queries in tsearch

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/

#6Teodor Sigaev
teodor@sigaev.ru
In reply to: Doug Cole (#4)
Re: Avoiding empty queries in tsearch

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/

#7Oleg Bartunov
oleg@sai.msu.su
In reply to: Doug Cole (#5)
Re: Avoiding empty queries in tsearch

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