On 12/8/06, Oleg Bartunov <oleg@xxxxxxxxxx> wrote:
On Fri, 8 Dec 2006, Rajesh Kumar Mallah wrote: > On 12/8/06, Oleg Bartunov <oleg@xxxxxxxxxx> wrote: >> You need to read documentation ! rank_cd accepts the same args as rank() >> function. > > Dear Oleg, > > Could you please elaborate a bit more if time permits. > our application is old and it was working fine in 8.1.5. do i need to > change the sql > to use a different function ? from reference manual: CREATE FUNCTION rank_cd( [ weights float4[], ] vector TSVECTOR, query TSQUERY, [ normalization int4 ] ) RETURNS float4
Dear Oleg, thanks for the prompt help. looks like we have to modify our application code. i would like to point out : In our Production Database \df public.rank_cd +--------+---------+------------------+-------------------------------------+ | Schema | Name | Result data type | Argument data types | +--------+---------+------------------+-------------------------------------+ | public | rank_cd | real | integer, tsvector, tsquery | | public | rank_cd | real | integer, tsvector, tsquery, integer | | public | rank_cd | real | tsvector, tsquery | | public | rank_cd | real | tsvector, tsquery, integer | +--------+---------+------------------+-------------------------------------+ (4 rows) In tsearch2.sql (with pgsql 8.2.0) $ grep "CREATE FUNCTION rank_cd" tsearch2.sql CREATE FUNCTION rank_cd(float4[], tsvector, tsquery) CREATE FUNCTION rank_cd(float4[], tsvector, tsquery, int4) CREATE FUNCTION rank_cd(tsvector, tsquery) CREATE FUNCTION rank_cd(tsvector, tsquery, int4) This means first arguments have changed from integer to float4[] This means all the application code needs to be changed now :-/
postgres=# SELECT name, rank_cd(name_vec,to_tsquery('hello') ) as rank from test where name_vec @@ to_tsquery('hello') ; name | rank -------------+------ hello world | 0.1 (1 row) or postgres=# SELECT name, rank_cd('{1,1,1,1}',name_vec,to_tsquery('hello') ) as rank from test where name_vec @@ to_tsquery('hello') ; name | rank -------------+------ hello world | 1 (1 row)
BTW: above did not work for me i had to explicitly cast '{1,1,1,1}' to '{1,1,1,1}'::float4[] , is anything fishy with my database ? SELECT name, rank_cd('{1,1,1,1}'::float4[] ,name_vec,to_tsquery('hello') ) as rank from test where name_vec @@ to_tsquery('hello') ; ( PS: thanks for the nice tsearch software we have been using it since "pre tsearch" era. (openfts) ) Regds Mallah.
> >> >> Oleg >> On Fri, 8 Dec 2006, Rajesh Kumar Mallah wrote: >> > Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@xxxxxxxxxx, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83