Tsearch not searching 'Y'

Started by sandeep prakash dhumalealmost 16 years ago5 messagesgeneral
Jump to latest
#1sandeep prakash dhumale
sandy9940@rediffmail.com

Hello All,

I am trying to get tsearch working for my application but I am facing a
problem when alphabet 'Y' is the in the tsquery.

can anyone please share some light on it.

# SELECT 'hollywood'::tsvector @@ to_tsquery('holly:*');
?column?
----------
f
(1 row)

SELECT 'hollywood'::tsvector @@ to_tsquery('holl:*');
?column?
----------
t
(1 row)

It works when i put <> in y as below but i don't want to do it that way.

SELECT 'hollywood'::tsvector @@ to_tsquery('holl<y>:*');
?column?
----------
t

Thanks in advance

#2Kenneth Marshall
ktm@rice.edu
In reply to: sandeep prakash dhumale (#1)
Re: [SQL] Tsearch not searching 'Y'

On Thu, Apr 29, 2010 at 01:13:40PM -0000, sandeep prakash dhumale wrote:

Hello All,

I am trying to get tsearch working for my application but I am facing a
problem when alphabet 'Y' is the in the tsquery.

can anyone please share some light on it.

# SELECT 'hollywood'::tsvector @@ to_tsquery('holly:*');
?column?
----------
f
(1 row)

SELECT 'hollywood'::tsvector @@ to_tsquery('holl:*');
?column?
----------
t
(1 row)

It works when i put <> in y as below but i don't want to do it that way.

SELECT 'hollywood'::tsvector @@ to_tsquery('holl<y>:*');
?column?
----------
t

Thanks in advance

That is because the to_tsquery() normalizes the tokens. Here is
what I get from the default configuration:

db=# select to_tsquery('holly:*');
to_tsquery
------------
'holli':*
(1 row)

db=# select to_tsquery('holl:*');
to_tsquery
------------
'holl':*
(1 row)

It is pretty easy to see why you see the behavior that you do.
Maybe you need to change your tsearch configuration to match what
you expect to happen.

Regards,
Ken

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: sandeep prakash dhumale (#1)
Re: Tsearch not searching 'Y'

"sandeep prakash dhumale" <sandy9940@rediffmail.com> writes:

I am trying to get tsearch working for my application but I am facing a
problem when alphabet 'Y' is the in the tsquery.

# SELECT 'hollywood'::tsvector @@ to_tsquery('holly:*');
?column?
----------
f
(1 row)

You can't use to_tsquery for this sort of thing, because it tries to
normalize the given words:

regression=# select to_tsquery('holly:*');
to_tsquery
------------
'holli':*
(1 row)

If you do this it works:

regression=# SELECT 'hollywood'::tsvector @@ 'holly:*'::tsquery;
?column?
----------
t
(1 row)

So if you want to use prefix matching, don't normalize.

regards, tom lane

#4sandeep prakash dhumale
sandy9940@rediffmail.com
In reply to: Kenneth Marshall (#2)
Re: Re: [GENERAL] [SQL] Tsearch not searching 'Y'

On Thu, 29 Apr 2010 19:27:33 +0530 wrote
&gt;On Thu, Apr 29, 2010 at 01:13:40PM -0000, sandeep prakash dhumale wrote:
&gt;&gt; Hello All,
&gt;&gt;
&gt;&gt; I am trying to get tsearch working for my application but I am facing a
&gt;&gt; problem when alphabet 'Y' is the in the tsquery.
&gt;&gt;
&gt;&gt; can anyone please share some light on it.
&gt;&gt;
&gt;&gt;
&gt;&gt; # SELECT 'hollywood'::tsvector @@ to_tsquery('holly:*');
&gt;&gt; ?column?
&gt;&gt; ----------
&gt;&gt; f
&gt;&gt; (1 row)
&gt;&gt;
&gt;&gt; SELECT 'hollywood'::tsvector @@ to_tsquery('holl:*');
&gt;&gt; ?column?
&gt;&gt; ----------
&gt;&gt; t
&gt;&gt; (1 row)
&gt;&gt;
&gt;&gt;
&gt;&gt; It works when i put &lt;&gt; in y as below but i don't want to do it that way.
&gt;&gt;
&gt;&gt; SELECT 'hollywood'::tsvector @@ to_tsquery('holl&lt;y&gt;:*');
&gt;&gt; ?column?
&gt;&gt; ----------
&gt;&gt; t
&gt;&gt;
&gt;&gt; Thanks in advance
&gt;
&gt;That is because the to_tsquery() normalizes the tokens. Here is
&gt;what I get from the default configuration:
&gt;
&gt;db=# select to_tsquery('holly:*');
&gt; to_tsquery
&gt;------------
&gt; 'holli':*
&gt;(1 row)
&gt;
&gt;db=# select to_tsquery('holl:*');
&gt; to_tsquery
&gt;------------
&gt; 'holl':*
&gt;(1 row)
&gt;
&gt;It is pretty easy to see why you see the behavior that you do.
&gt;Maybe you need to change your tsearch configuration to match what
&gt;you expect to happen.
&gt;
&gt;Regards,
&gt;Ken
&gt;
&gt;
&gt;--
&gt;Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
&gt;To make changes to your subscription:
&gt;http://www.postgresql.org/mailpref/pgsql-general
&gt;

First of all thanks for your replies Tom and Ken,

I am little newbie to Tsearch so I appologies if I sound a little confuse.

Tom: If i do by casting like you wrote then i ran into case sensitivity issue also then it does not work for other searches I guess then it sees for exact matches and not normalize to lexims.

Ken: As you said I need to change my configuration, It would be great if you can point me out where i can change that configuration

and what about that&nbsp; &lt;y&gt; in the query how does it work, does that mean to explicitly include y in to_tsquery.

All your help is higly appriciated.

--Sandy

#5John Gage
jsmgage@numericable.fr
In reply to: Tom Lane (#3)
Re: [SQL] Tsearch not searching 'Y'

You can avoid stemming by using 'simple' instead of 'english' as the
language of the words in to_tsvector (which is a little more awkward
than the cast).

"There are no stop words for the simple dictionary. It will just
convert to lower case, and index every unique word.
SELECT to_tsvector('simple', 'Andy andy The the in out');
to_tsvector
-------------------------------------
'in':5 'out':6 'the':3,4 'andy':1,2
(1 row)

John

On Apr 29, 2010, at 4:01 PM, Tom Lane wrote:

Show quoted text

"sandeep prakash dhumale" <sandy9940@rediffmail.com> writes:

I am trying to get tsearch working for my application but I am
facing a
problem when alphabet 'Y' is the in the tsquery.

# SELECT 'hollywood'::tsvector @@ to_tsquery('holly:*');
?column?
----------
f
(1 row)

You can't use to_tsquery for this sort of thing, because it tries to
normalize the given words:

regression=# select to_tsquery('holly:*');
to_tsquery
------------
'holli':*
(1 row)

If you do this it works:

regression=# SELECT 'hollywood'::tsvector @@ 'holly:*'::tsquery;
?column?
----------
t
(1 row)

So if you want to use prefix matching, don't normalize.

regards, tom lane

--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql