mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
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
This commit is contained in:
@ -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 */
|
||||
|
||||
|
Reference in New Issue
Block a user