Fix URL generation in headline. Only tag lexeme will be replaced by space.

Per http://archives.postgresql.org/pgsql-bugs/2008-12/msg00013.php
This commit is contained in:
Teodor Sigaev 2009-01-15 17:06:03 +00:00
parent 90208cc2fb
commit 87042a1969
3 changed files with 16 additions and 12 deletions

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tsearch/ts_parse.c,v 1.7 2008/01/01 19:45:52 momjian Exp $
* $PostgreSQL: pgsql/src/backend/tsearch/ts_parse.c,v 1.7.2.1 2009/01/15 17:06:03 teodor Exp $
*
*-------------------------------------------------------------------------
*/
@ -607,7 +607,7 @@ generateHeadline(HeadlineParsedText *prs)
*ptr = ' ';
ptr++;
}
else
else if (!wrd->skip)
{
if (wrd->selected)
{

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.14.2.2 2009/01/15 17:05:39 teodor Exp $
* $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.14.2.3 2009/01/15 17:06:03 teodor Exp $
*
*-------------------------------------------------------------------------
*/
@ -1587,10 +1587,11 @@ prsd_end(PG_FUNCTION_ARGS)
#define COMPLEXTOKEN(x) ( (x)==URL_T || (x)==NUMHWORD || (x)==ASCIIHWORD || (x)==HWORD )
#define ENDPUNCTOKEN(x) ( (x)==SPACE )
#define TS_IDIGNORE(x) ( (x)==TAG_T || (x)==PROTOCOL || (x)==SPACE || (x)==XMLENTITY )
#define HLIDIGNORE(x) ( (x)==URL_T || (x)==TAG_T || (x)==NUMHWORD || (x)==ASCIIHWORD || (x)==HWORD )
#define XMLHLIDIGNORE(x) ( (x)==URL_T || (x)==NUMHWORD || (x)==ASCIIHWORD || (x)==HWORD )
#define NONWORDTOKEN(x) ( (x)==SPACE || HLIDIGNORE(x) )
#define TS_IDIGNORE(x) ( (x)==TAG_T || (x)==PROTOCOL || (x)==SPACE || (x)==XMLENTITY )
#define HLIDREPLACE(x) ( (x)==TAG_T )
#define HLIDSKIP(x) ( (x)==URL_T || (x)==NUMHWORD || (x)==ASCIIHWORD || (x)==HWORD )
#define XMLHLIDSKIP(x) ( (x)==URL_T || (x)==NUMHWORD || (x)==ASCIIHWORD || (x)==HWORD )
#define NONWORDTOKEN(x) ( (x)==SPACE || HLIDREPLACE(x) || HLIDSKIP(x) )
#define NOENDTOKEN(x) ( NONWORDTOKEN(x) || (x)==SCIENTIFIC || (x)==VERSIONNUMBER || (x)==DECIMAL || (x)==SIGNEDINT || (x)==UNSIGNEDINT || TS_IDIGNORE(x) )
typedef struct
@ -1867,13 +1868,15 @@ prsd_headline(PG_FUNCTION_ARGS)
prs->words[i].selected = 1;
if (highlight == 0)
{
if (HLIDIGNORE(prs->words[i].type))
if (HLIDREPLACE(prs->words[i].type))
prs->words[i].replace = 1;
else if ( HLIDSKIP(prs->words[i].type) )
prs->words[i].skip = 1;
}
else
{
if (XMLHLIDIGNORE(prs->words[i].type))
prs->words[i].replace = 1;
if (XMLHLIDSKIP(prs->words[i].type))
prs->words[i].skip = 1;
}
prs->words[i].in = (prs->words[i].repeated) ? 0 : 1;

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1998-2008, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/include/tsearch/ts_public.h,v 1.8 2008/01/01 19:45:59 momjian Exp $
* $PostgreSQL: pgsql/src/include/tsearch/ts_public.h,v 1.8.2.1 2009/01/15 17:06:03 teodor Exp $
*
*-------------------------------------------------------------------------
*/
@ -38,7 +38,8 @@ typedef struct
in:1,
replace:1,
repeated:1,
unused:4,
skip:1,
unused:3,
type:8,
len:16;
char *word;