我为我的网站创建了搜索功能 在 views.py 中:
def search_view(request):
query=request.GET.get("q")
if query:
products=Product.objects.filter(title__icontains=query,description__icontains=query).order_by("-date")
else:
products = Product.objects.none()
context={
"products":products,
"query":query
}
return render(request, 'core/search.html',context)
我在我的网站中创建了一个用于搜索产品的模板 并在 search.html
<form action="{% url 'core:search' %}" method="GET" class="search-form">
<input type="text" name="q" placeholder="Enter your product name..." class="search-input">
<button type="submit" class="search-button">Search</button>
</form>
但是搜索功能不起作用。我的意思是它没有从我的数据库中找到产品
请告诉我这里出了什么问题?
您在此处编写的查询会检查标题和描述中是否存在两者的文本。如果您想匹配至少具有两者之一的项目,您可以使用:
from django.db.models import Q
def search_view(request):
query = request.GET.get('q')
if query:
products = Product.objects.filter(
Q(title__icontains=query) | Q(description__icontains=query)
).order_by('-date')
else:
products = Product.objects.none()
context = {'products': products, 'query': query}
return render(request, 'core/search.html', context)
话虽这么说,子字符串匹配并不是一个好的搜索方式:一个小拼写错误、不同的单词顺序、同义词等都会失败。
通常搜索时最好使用搜索技术,例如 Solr、Elasticsearch、Whoosh [GitHub]、Xapian等
__search
查找[Django-doc] 和其他搜索向量技术,尽管这仍然不是很有效。