Python 如何在Django进行提前搜索?
目前我在Django工作,更确切地说是在filter method工作 据我所知,过滤器是这样工作的。如果我搜索“Apple iphone 7 plus”,它会在我的记录中找到它出现的整个句子,但我想用以下方式修改这个过滤器。我想将查询拆分为单词,然后在文档中查找要搜索的单词,就像上面的查询应该返回那些包含“apple”&“iphone”&“7”&“plus”的记录一样 有人能告诉我如何改进我的查询吗。django中的哪个内置函数可以帮助我 我最近的代码如下所示。Python 如何在Django进行提前搜索?,python,django,Python,Django,目前我在Django工作,更确切地说是在filter method工作 据我所知,过滤器是这样工作的。如果我搜索“Apple iphone 7 plus”,它会在我的记录中找到它出现的整个句子,但我想用以下方式修改这个过滤器。我想将查询拆分为单词,然后在文档中查找要搜索的单词,就像上面的查询应该返回那些包含“apple”&“iphone”&“7”&“plus”的记录一样 有人能告诉我如何改进我的查询吗。django中的哪个内置函数可以帮助我 我最近的代码如下所示。 @api_view(['GET
@api_view(['GET'])
def Filter_Mobiles(request,query):
print(query)
try:
que = Q(SNR_Title__icontains=query )
Mobile_all = Mobile_DB.objects.filter(que)
except Mobile_DB.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
请忽略语法错误
我如何修改这个。是否有任何内置功能可以帮助我?请建议我改变一下。
提前谢谢 您可以创建或查询:
Mobile_DB.objects.filter(Q(SNR_Title__icontains='apple') | Q(SNR_Title__icontains='iphone'))
但它仍然只会创建一个SQL查询,这对于复杂的搜索是不够的。
我建议您查看witch是Django的一个模块,它允许您轻松地将复杂的搜索引擎连接到Django模型。您可以创建或查询:
Mobile_DB.objects.filter(Q(SNR_Title__icontains='apple') | Q(SNR_Title__icontains='iphone'))
但它仍然只会创建一个SQL查询,这对于复杂的搜索是不够的。
我建议您查看witch是Django的一个模块,它允许您轻松地将复杂的搜索引擎连接到Django模型。简单的解决方案是:
que = Q()
for word in query.split():
que &= Q(SNR_Title__icontains=word)
Mobile_all = Mobile_DB.objects.filter(que)
而且您不需要异常Mobile\u DB.DoesNotExist,filter从不引发它。简单的解决方案是:
que = Q()
for word in query.split():
que &= Q(SNR_Title__icontains=word)
Mobile_all = Mobile_DB.objects.filter(que)
您不需要异常Mobile\u DB.DoesNotExist,filter永远不会提出它。让我知道此解决方案是否适用于您,查询每个单词并提供所有数据的并集。对于很多记录来说可能有点慢。我建议使用存储过程进行更复杂的搜索
queryset_final = None
for q in query.split(' '):
que = Mobile_DB.objects.filter(Q(SNR_Title__icontains=q))
if queryset_final:
queryset_final = queryset_final | que
else:
queryset_final = que
Mobile_all = queryset_final.distinct()
让我知道这个解决方案是否适合您,查询每个单词并提供所有数据的并集。对于很多记录来说可能有点慢。我建议使用存储过程进行更复杂的搜索
queryset_final = None
for q in query.split(' '):
que = Mobile_DB.objects.filter(Q(SNR_Title__icontains=q))
if queryset_final:
queryset_final = queryset_final | que
else:
queryset_final = que
Mobile_all = queryset_final.distinct()
如何自动查询从输入中提取的单词?OP正在寻找
和(&
)查询。他希望获取包含查询中所有给定单词的记录。您已使用或(
)查询进行了回答。如何自动查询从输入中挑选的单词?OP正在查找和(&
)查询。他希望获取包含查询中所有给定单词的记录。您已回答了或(|)查询。可能重复的Wow可能重复!从来都不知道布尔运算符可以像那样链接在一个循环中。哇!从来没有人知道布尔运算符可以像循环中那样链接。