diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-15 16:33:28 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-15 16:33:28 +0000 |
commit | 8fd07a35bab33f38c367da145bb3e19e93e86c4f (patch) | |
tree | 350ac950d18a27a9621811851d218beee7572ece /src | |
parent | f8c8386a08f2f98e0fc45093e1fe534ef45c6230 (diff) | |
download | postgresql-8fd07a35bab33f38c367da145bb3e19e93e86c4f.tar.gz postgresql-8fd07a35bab33f38c367da145bb3e19e93e86c4f.zip |
Fix generation too long headline with ShortWords.
Per http://archives.postgresql.org/pgsql-hackers/2008-09/msg01088.php
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/tsearch/wparser_def.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index da644c3c2ec..1943c1143ce 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -7,7 +7,7 @@ * * * 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); } + static void mark_hl_words(HeadlineParsedText *prs, TSQuery query, int highlight, 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) { /* got end of text and our cover is shoter * than min_words */ - for (i = p; i >= 0; i--) + for (i = p - 1; i >= 0; i--) { if (!NONWORDTOKEN(prs->words[i].type)) curlen++; if (prs->words[i].item && !prs->words[i].repeated) poslen++; + if ( curlen >= max_words ) + break; if (NOENDTOKEN(prs->words[i].type) || prs->words[i].len <= shortword) continue; if (curlen >= min_words) |