misc: control similarity threshold for fts (#50781)
This commit is contained in:
parent
1c8c8117ff
commit
e5f368bec9
|
@ -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).'),
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue