On 02/14/2017 07:35 AM, Thomas Nyberg wrote: > Hello, > > I think it's easier to explain my question with example code: > > ------------------------ > CREATE TABLE t ( s VARCHAR ); > CREATE TABLE > > INSERT INTO t VALUES ('hello'), ('hello world'); > INSERT 0 2 > > SELECT * FROM t; > s > ------------- > hello > hello world > (2 rows) > > SELECT s, ts_rank(vector, query) AS rank > FROM t, to_tsvector(s) vector, to_tsquery('hello') query > WHERE query @@ vector; > s | rank > -------------+----------- > hello | 0.0607927 > hello world | 0.0607927 > (2 rows) > ------------------------ > > Here both 'hello' and 'hello world' are ranked equally highly when > searching with 'hello'. What I'm wondering is, is there a way within > postgres to have it match higher to just 'hello' than 'hello world'? > I.e. something like it slightly down-weights extraneous terms? Of course > in general I don't know the query or the field strings ahead of time. Some digging around found this: https://www.postgresql.org/docs/9.6/static/textsearch-controls.html#TEXTSEARCH-RANKING Setting a normalization of 1: test=# SELECT s, ts_rank(vector, query, 1) AS rank FROM t, to_tsvector(s) vector, to_tsquery('hello') query WHERE query @@ vector; s | rank -------------+----------- hello | 0.0607927 hello world | 0.0383559 > > Thanks for any help! > > Cheers, > Thomas > > -- Adrian Klaver adrian.klaver@xxxxxxxxxxx -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general