Fix generation too long headline with ShortWords.

Per http://archives.postgresql.org/pgsql-hackers/2008-09/msg01088.php
This commit is contained in:
Teodor Sigaev 2009-01-15 16:33:28 +00:00
parent f8c8386a08
commit 8fd07a35ba

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.18 2009/01/01 17:23:48 momjian Exp $ * $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.19 2009/01/15 16:33:28 teodor Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1921,6 +1921,7 @@ mark_hl_fragments(HeadlineParsedText *prs, TSQuery query, int highlight,
} }
pfree(covers); pfree(covers);
} }
static void static void
mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight, mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight,
int shortword, int min_words, int max_words) int shortword, int min_words, int max_words)
@ -1981,12 +1982,14 @@ mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight,
if (curlen < min_words && i >= prs->curwords) if (curlen < min_words && i >= prs->curwords)
{ /* got end of text and our cover is shoter { /* got end of text and our cover is shoter
* than min_words */ * than min_words */
for (i = p; i >= 0; i--) for (i = p - 1; i >= 0; i--)
{ {
if (!NONWORDTOKEN(prs->words[i].type)) if (!NONWORDTOKEN(prs->words[i].type))
curlen++; curlen++;
if (prs->words[i].item && !prs->words[i].repeated) if (prs->words[i].item && !prs->words[i].repeated)
poslen++; poslen++;
if ( curlen >= max_words )
break;
if (NOENDTOKEN(prs->words[i].type) || prs->words[i].len <= shortword) if (NOENDTOKEN(prs->words[i].type) || prs->words[i].len <= shortword)
continue; continue;
if (curlen >= min_words) if (curlen >= min_words)