updated comments, removed direct trigram search

This commit is contained in:
smilerz
2021-04-26 08:35:55 -05:00
parent 73604a7006
commit 7c2affe4ba

View File

@@ -48,15 +48,19 @@ def search_recipes(queryset, params):
search_type="websearch", search_type="websearch",
config=language, config=language,
) )
# TODO make icontains a configurable option - it could eventually have performance impacts # TODO create user options to add/remove query elements from search so that they can fine tune their own experience
# trigrams, icontains, unaccent and startswith all impact results and performance significantly
search_vectors = ( search_vectors = (
SearchVector('search_vector') SearchVector('search_vector')
# searching instruction is extremely slow
# TODO add search vector field, GIN index and save signal to update the vector on step save
# + SearchVector('steps__instruction', weight='D', config=language)
+ SearchVector(StringAgg('steps__ingredients__food__name__unaccent', delimiter=' '), weight='B', config=language) + SearchVector(StringAgg('steps__ingredients__food__name__unaccent', delimiter=' '), weight='B', config=language)
+ SearchVector(StringAgg('keywords__name__unaccent', delimiter=' '), weight='B', config=language)) + SearchVector(StringAgg('keywords__name__unaccent', delimiter=' '), weight='B', config=language))
trigram = ( trigram = (
TrigramSimilarity('name__unaccent', search_string) TrigramSimilarity('name__unaccent', search_string)
+ TrigramSimilarity('description__unaccent', search_string) + TrigramSimilarity('description__unaccent', search_string)
# adding trigrams to ingredients causes duplicate results that can't be made unique # adding trigrams to ingredients and keywords causes duplicate results that can't be made unique
# + TrigramSimilarity('steps__ingredients__food__name__unaccent', search_string) # + TrigramSimilarity('steps__ingredients__food__name__unaccent', search_string)
# + TrigramSimilarity('keywords__name__unaccent', search_string) # + TrigramSimilarity('keywords__name__unaccent', search_string)
) )
@@ -68,17 +72,13 @@ def search_recipes(queryset, params):
trigram=trigram trigram=trigram
) )
.filter( .filter(
# vector=search_query
Q(vector=search_query) Q(vector=search_query)
| Q(trigram__gt=0.2) # adding trigrams to ingredients causes duplicate results that can't be made unique
# | Q(trigram__gt=0.2)
| Q(name__istartswith=search_string)
) )
.order_by('-rank')) .order_by('-rank'))
else:
queryset = queryset.filter(name__icontains=search_string)
if len(search_keywords) > 0:
if search_keywords_or == 'true':
queryset = queryset.filter(keywords__id__in=search_keywords)
else:
for k in search_keywords: for k in search_keywords:
queryset = queryset.filter(keywords__id=k) queryset = queryset.filter(keywords__id=k)