diff --git a/products/utils.py b/products/utils.py index 488d305..f3ff923 100644 --- a/products/utils.py +++ b/products/utils.py @@ -81,11 +81,23 @@ def find_related_products_v1(keyword): return products_qs +def find_related_products_v5(keyword): + """ + Single query solution, using Q objects + """ + products_qs = Product.objects.filter( + Q(name__icontains=keyword)| + Q(description__icontains=keyword)| + Q(tags__label__icontains=keyword)| + Q(category__name__icontains=keyword)| + Q(attributes__label__icontains=keyword) + ) + return products_qs + + def find_related_products_v2(keyword): """ - More advanced search - - Using search vectors + More advanced: using search vectors """ fields=('name', 'description', 'tags__label', 'attributes__label', 'category__name') vector = SearchVector(*fields) diff --git a/products/views.py b/products/views.py index 6c0b14f..70c75af 100644 --- a/products/views.py +++ b/products/views.py @@ -23,7 +23,7 @@ from companies.models import Company from history.models import HistorySync from back_latienda.permissions import IsCreator -from .utils import extract_search_filters, find_related_products_v1, find_related_products_v2, find_related_products_v3 +from .utils import extract_search_filters, find_related_products_v5, find_related_products_v2, find_related_products_v3 from utils.tag_serializers import TaggitSerializer from utils.tag_filters import ProductTagFilter @@ -155,7 +155,8 @@ def product_search(request): chunks = query_string.split(' ') for chunk in chunks: - products_qs = find_related_products_v1(chunk) + # import ipdb; ipdb.set_trace() + products_qs = find_related_products_v5(chunk) # products_qs = find_related_products_v2(chunk) # products_qs = find_related_products_v3(chunk) for instance in products_qs: