misc: control similarity threshold for fts (#50781)

This commit is contained in:
Benjamin Dauvergne 2021-02-02 17:03:49 +01:00
parent 1c8c8117ff
commit e5f368bec9
2 changed files with 8 additions and 1 deletions

View File

@ -348,6 +348,9 @@ default_settings = dict(
A2_DUPLICATES_THRESHOLD=Setting(
default=0.7,
definition='Trigram similarity threshold for considering user as duplicate.'),
A2_FTS_THRESHOLD=Setting(
default=0.2,
definition='Trigram similarity threshold for free text search.'),
A2_DUPLICATES_BIRTHDATE_BONUS=Setting(
default=0.3,
definition='Bonus in case of birthdate match (no bonus is 0, max is 1).'),

View File

@ -47,6 +47,10 @@ class UserQuerySet(models.QuerySet):
return wrap_qs(self.none())
if '@' in search and len(search.split()) == 1:
with connection.cursor() as cursor:
cursor.execute(
"SET pg_trgm.similarity_threshold = %f" % app_settings.A2_FTS_THRESHOLD
)
qs = self.filter(email__icontains=search).order_by(Unaccent('last_name'), Unaccent('first_name'))
if qs.exists():
return wrap_qs(qs)
@ -88,7 +92,7 @@ class UserQuerySet(models.QuerySet):
if qs.exists():
return wrap_qs(qs)
qs = self.find_duplicates(fullname=search, limit=None, threshold=0.2)
qs = self.find_duplicates(fullname=search, limit=None, threshold=app_settings.A2_FTS_THRESHOLD)
extra_user_ids = set()
attribute_values = AttributeValue.objects.filter(search_vector=SearchQuery(search), attribute__searchable=True)
extra_user_ids.update(self.filter(attribute_values__in=attribute_values).values_list('id', flat=True))