diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/tsearch/dict_thesaurus.c | 73 | ||||
-rw-r--r-- | src/backend/tsearch/thesaurus_sample.ths | 3 | ||||
-rw-r--r-- | src/test/regress/expected/tsdicts.out | 6 |
3 files changed, 42 insertions, 40 deletions
diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c index 7a0ae4afd3e..31564a78993 100644 --- a/src/backend/tsearch/dict_thesaurus.c +++ b/src/backend/tsearch/dict_thesaurus.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tsearch/dict_thesaurus.c,v 1.5 2007/11/09 01:32:22 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tsearch/dict_thesaurus.c,v 1.6 2007/11/10 15:39:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -412,47 +412,48 @@ compileTheLexeme(DictThesaurus * d) { TSLexeme *ptr; - ptr = (TSLexeme *) DatumGetPointer(FunctionCall4(&(d->subdict->lexize), - PointerGetDatum(d->subdict->dictData), - PointerGetDatum(d->wrds[i].lexeme), - Int32GetDatum(strlen(d->wrds[i].lexeme)), - PointerGetDatum(NULL))); - - if (!ptr) - elog(ERROR, "thesaurus word-sample \"%s\" isn't recognized by subdictionary (rule %d)", - d->wrds[i].lexeme, d->wrds[i].entries->idsubst + 1); - else if (!(ptr->lexeme)) - { - elog(NOTICE, "thesaurus word-sample \"%s\" is recognized as stop-word, assign any stop-word (rule %d)", - d->wrds[i].lexeme, d->wrds[i].entries->idsubst + 1); - + if (strcmp(d->wrds[i].lexeme, "?") == 0) /* Is stop word marker? */ newwrds = addCompiledLexeme(newwrds, &nnw, &tnm, NULL, d->wrds[i].entries, 0); - } else { - while (ptr->lexeme) + ptr = (TSLexeme *) DatumGetPointer(FunctionCall4(&(d->subdict->lexize), + PointerGetDatum(d->subdict->dictData), + PointerGetDatum(d->wrds[i].lexeme), + Int32GetDatum(strlen(d->wrds[i].lexeme)), + PointerGetDatum(NULL))); + + if (!ptr) + elog(ERROR, "thesaurus word-sample \"%s\" isn't recognized by subdictionary (rule %d)", + d->wrds[i].lexeme, d->wrds[i].entries->idsubst + 1); + else if (!(ptr->lexeme)) + elog(ERROR, "thesaurus word-sample \"%s\" is recognized as stop-word, use \"?\" for stop words instead (rule %d)", + d->wrds[i].lexeme, d->wrds[i].entries->idsubst + 1); + else { - TSLexeme *remptr = ptr + 1; - int tnvar = 1; - int curvar = ptr->nvariant; - - /* compute n words in one variant */ - while (remptr->lexeme) + while (ptr->lexeme) { - if (remptr->nvariant != (remptr - 1)->nvariant) - break; - tnvar++; - remptr++; - } - - remptr = ptr; - while (remptr->lexeme && remptr->nvariant == curvar) - { - newwrds = addCompiledLexeme(newwrds, &nnw, &tnm, remptr, d->wrds[i].entries, tnvar); - remptr++; + TSLexeme *remptr = ptr + 1; + int tnvar = 1; + int curvar = ptr->nvariant; + + /* compute n words in one variant */ + while (remptr->lexeme) + { + if (remptr->nvariant != (remptr - 1)->nvariant) + break; + tnvar++; + remptr++; + } + + remptr = ptr; + while (remptr->lexeme && remptr->nvariant == curvar) + { + newwrds = addCompiledLexeme(newwrds, &nnw, &tnm, remptr, d->wrds[i].entries, tnvar); + remptr++; + } + + ptr = remptr; } - - ptr = remptr; } } diff --git a/src/backend/tsearch/thesaurus_sample.ths b/src/backend/tsearch/thesaurus_sample.ths index 77a32a75d05..0b4857ec334 100644 --- a/src/backend/tsearch/thesaurus_sample.ths +++ b/src/backend/tsearch/thesaurus_sample.ths @@ -14,4 +14,5 @@ two : *2 supernovae stars : *sn supernovae : *sn booking tickets : order invitation cards -# booking the tickets : order invitation Cards +booking ? tickets : order invitation Cards + diff --git a/src/test/regress/expected/tsdicts.out b/src/test/regress/expected/tsdicts.out index 3520baceac7..4b8929361a8 100644 --- a/src/test/regress/expected/tsdicts.out +++ b/src/test/regress/expected/tsdicts.out @@ -311,8 +311,8 @@ SELECT to_tsvector('thesaurus_tst', 'Supernovae star is very new star and usuall (1 row) SELECT to_tsvector('thesaurus_tst', 'Booking tickets is looking like a booking a tickets'); - to_tsvector ---------------------------------------------------------------------- - 'book':8 'card':3 'like':6 'look':5 'invit':2 'order':1 'ticket':10 + to_tsvector +------------------------------------------------------- + 'card':3,10 'like':6 'look':5 'invit':2,9 'order':1,8 (1 row) |