diff --git a/doc/src/sgml/textsearch.sgml b/doc/src/sgml/textsearch.sgml index 604e54579dec28464c835ec87f47942bd4296bf7..9e78286bb59c93ec1c5f5eece553efd31d487f1f 100644 --- a/doc/src/sgml/textsearch.sgml +++ b/doc/src/sgml/textsearch.sgml @@ -889,9 +889,13 @@ SELECT plainto_tsquery('english', 'The Fat & Rats:C'); </para> <para> - This function requires positional information in its input. - Therefore it will not work on <quote>stripped</> <type>tsvector</> - values — it will always return zero. + This function requires lexeme positional information to perform + its calculation. Therefore, it ignores any <quote>stripped</> + lexemes in the <type>tsvector</>. If there are no unstripped + lexemes in the input, the result will be zero. (See <xref + linkend="textsearch-manipulate-tsvector"> for more information + about the <function>strip</> function and positional information + in <type>tsvector</>s.) </para> </listitem> </varlistentry> diff --git a/src/backend/utils/adt/tsrank.c b/src/backend/utils/adt/tsrank.c index c9e71c9e21d1bd6e477efbf58b6ffad41cc3dca7..dcb681d085fc931e82f3a0a0f5529327e11aef24 100644 --- a/src/backend/utils/adt/tsrank.c +++ b/src/backend/utils/adt/tsrank.c @@ -658,8 +658,9 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen) } else { - dimt = POSNULL.npos; - post = POSNULL.pos; + /* ignore words without positions */ + entry++; + continue; } while (cur + dimt >= len) diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out index 9341dbe0d77e1723f0c98f7837b5b69b7c748fc3..d22d345145806f25de71a445455ad3ebdc661edd 100644 --- a/src/test/regress/expected/tsearch.out +++ b/src/test/regress/expected/tsearch.out @@ -596,6 +596,20 @@ S. T. Coleridge (1772-1834) 0.1 (1 row) +SELECT ts_rank_cd(strip(to_tsvector('both stripped')), + to_tsquery('both & stripped')); + ts_rank_cd +------------ + 0 +(1 row) + +SELECT ts_rank_cd(to_tsvector('unstripped') || strip(to_tsvector('stripped')), + to_tsquery('unstripped & stripped')); + ts_rank_cd +------------ + 0 +(1 row) + --headline tests SELECT ts_headline('english', ' Day after day, day after day, diff --git a/src/test/regress/sql/tsearch.sql b/src/test/regress/sql/tsearch.sql index 9fd12076acedb0b7c2a617466070b49e76f40778..fa460cd4b9b7b3834cba1bb885c469970de2f5be 100644 --- a/src/test/regress/sql/tsearch.sql +++ b/src/test/regress/sql/tsearch.sql @@ -165,6 +165,12 @@ Water, water, every where, S. T. Coleridge (1772-1834) '), to_tsquery('english', 'ocean')); +SELECT ts_rank_cd(strip(to_tsvector('both stripped')), + to_tsquery('both & stripped')); + +SELECT ts_rank_cd(to_tsvector('unstripped') || strip(to_tsvector('stripped')), + to_tsquery('unstripped & stripped')); + --headline tests SELECT ts_headline('english', ' Day after day, day after day,