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