new and improved Q-based search implementation

This commit is contained in:
Sam
2021-02-19 10:06:26 +00:00
parent 974f6f248d
commit aec9a0d7a1
2 changed files with 18 additions and 5 deletions

View File

@@ -81,11 +81,23 @@ def find_related_products_v1(keyword):
return products_qs 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): def find_related_products_v2(keyword):
""" """
More advanced search More advanced: using search vectors
Using search vectors
""" """
fields=('name', 'description', 'tags__label', 'attributes__label', 'category__name') fields=('name', 'description', 'tags__label', 'attributes__label', 'category__name')
vector = SearchVector(*fields) vector = SearchVector(*fields)

View File

@@ -23,7 +23,7 @@ from companies.models import Company
from history.models import HistorySync from history.models import HistorySync
from back_latienda.permissions import IsCreator 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_serializers import TaggitSerializer
from utils.tag_filters import ProductTagFilter from utils.tag_filters import ProductTagFilter
@@ -155,7 +155,8 @@ def product_search(request):
chunks = query_string.split(' ') chunks = query_string.split(' ')
for chunk in chunks: 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_v2(chunk)
# products_qs = find_related_products_v3(chunk) # products_qs = find_related_products_v3(chunk)
for instance in products_qs: for instance in products_qs: