diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2018-03-21 14:57:42 +0300 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2018-03-21 14:57:42 +0300 |
commit | be8a7a6866276b228b4ffaa3003e1dc2dd1d140a (patch) | |
tree | 6ff95878418ee689723728dca29de6de337ef200 /contrib/pg_trgm/trgm_gist.c | |
parent | f20b3285340cc0576ab8445f483700983cf2ba9f (diff) |
Add strict_word_similarity to pg_trgm module
strict_word_similarity is similar to existing word_similarity function but
it takes into account word boundaries to compute similarity.
Author: Alexander Korotkov
Review by: David Steele, Liudmila Mantrova, me
Discussion: https://www.postgresql.org/message-id/flat/CY4PR17MB13207ED8310F847CF117EED0D85A0@CY4PR17MB1320.namprd17.prod.outlook.com
Diffstat (limited to 'contrib/pg_trgm/trgm_gist.c')
-rw-r--r-- | contrib/pg_trgm/trgm_gist.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c index e55dc19a65c..53e6830ab1b 100644 --- a/contrib/pg_trgm/trgm_gist.c +++ b/contrib/pg_trgm/trgm_gist.c @@ -221,6 +221,7 @@ gtrgm_consistent(PG_FUNCTION_ARGS) { case SimilarityStrategyNumber: case WordSimilarityStrategyNumber: + case StrictWordSimilarityStrategyNumber: qtrg = generate_trgm(VARDATA(query), querysize - VARHDRSZ); break; @@ -290,10 +291,11 @@ gtrgm_consistent(PG_FUNCTION_ARGS) { case SimilarityStrategyNumber: case WordSimilarityStrategyNumber: - /* Similarity search is exact. Word similarity search is inexact */ - *recheck = (strategy == WordSimilarityStrategyNumber); - nlimit = (strategy == SimilarityStrategyNumber) ? - similarity_threshold : word_similarity_threshold; + case StrictWordSimilarityStrategyNumber: + /* Similarity search is exact. (Strict) word similarity search is inexact */ + *recheck = (strategy != SimilarityStrategyNumber); + + nlimit = index_strategy_get_limit(strategy); if (GIST_LEAF(entry)) { /* all leafs contains orig trgm */ @@ -468,7 +470,9 @@ gtrgm_distance(PG_FUNCTION_ARGS) { case DistanceStrategyNumber: case WordDistanceStrategyNumber: - *recheck = strategy == WordDistanceStrategyNumber; + case StrictWordDistanceStrategyNumber: + /* Only plain trigram distance is exact */ + *recheck = (strategy != DistanceStrategyNumber); if (GIST_LEAF(entry)) { /* all leafs contains orig trgm */ |