more search optimization

This commit is contained in:
Sam
2021-02-04 13:39:56 +00:00
parent 1441644b74
commit 67ce92c33f

View File

@@ -138,24 +138,23 @@ def product_search(request):
if query_string is None: if query_string is None:
return Response({"errors": {"details": "No query string to parse"}}) return Response({"errors": {"details": "No query string to parse"}})
try: try:
chunks = query_string.split(' ') # save results
result_set = set() result_set = set()
for chunk in chunks: # split query string into single words
# search in name chunks = query_string.split(' ')
name_search = Q(name=chunk) # create search queries
description_search = Q(description=chunk) name_search = Q(name__in=chunks)
tags_search = Q(tags=chunk) description_search = Q(description__in=chunks)
category_search = Q(category=chunk) tags_search = Q(tags__in=chunks)
attributes_search = Q(attributes=chunk) category_search = Q(category__in=chunks)
attributes_search = Q(attributes__in=chunks)
query_list = [name_search, description_search, tags_search, category_search, attributes_search] query_list = [name_search, description_search, tags_search, category_search, attributes_search]
# get instances
products = Product.objects.filter(reduce(operator.or_, query_list)) products = Product.objects.filter(reduce(operator.or_, query_list))
# add to set
for item in products: for item in products:
result_set.add(item) result_set.add(item)
# serialize and respond
data = serializers.serialize('json', result_set) data = serializers.serialize('json', result_set)
return Response(data=data) return Response(data=data)
except Exception as e: except Exception as e: