Обсуждение: Avoiding empty queries in tsearch

Поиск
Список
Период
Сортировка

Avoiding empty queries in tsearch

От
"Doug Cole"
Дата:
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

Re: Avoiding empty queries in tsearch

От
Teodor Sigaev
Дата:
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/

Re: Avoiding empty queries in tsearch

От
"Doug Cole"
Дата:
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/

Re: Avoiding empty queries in tsearch

От
Teodor Sigaev
Дата:

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/

Re: Avoiding empty queries in tsearch

От
Oleg Bartunov
Дата:
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

Re: Avoiding empty queries in tsearch

От
"Doug Cole"
Дата:
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/